• <DFS & BFS> 286 339 (BFS)364


    286. Walls and Gates

    DFS: 思路是,搜索0的位置,每找到一个0,以其周围四个相邻点为起点,开始 DFS 遍历,并带入深度值1,如果遇到的值大于当前深度值,将位置值赋为当前深度值,并对当前点的四个相邻点开始DFS遍历,注意此时深度值需要加1

    class Solution {
        public void wallsAndGates(int[][] rooms) {
            for(int i = 0; i < rooms.length; i++){
                for(int j = 0; j < rooms[0].length; j++){
                    if(rooms[i][j] == 0) dfs(rooms, i, j, 0);
                }
            }
        }
        
        private void dfs(int[][] rooms, int i, int j, int depth){
            if(i < 0 || i >= rooms.length || j < 0 || j >= rooms[0].length || rooms[i][j] < depth) 
                return;
            rooms[i][j] = depth;
            dfs(rooms, i + 1, j, depth + 1);
            dfs(rooms, i - 1, j, depth + 1);
            dfs(rooms, i, j + 1, depth + 1);
            dfs(rooms, i, j - 1, depth + 1);
        }
    }

    339. Nested List Weight Sum

    class Solution {
        public int depthSum(List<NestedInteger> nestedList) {
            if(nestedList == null || nestedList.size() == 0) return 0;
            return dfs(nestedList, 1);
        }
        
        private int dfs(List<NestedInteger> nestedList, int depth){
            int sum = 0;
            for(NestedInteger ni : nestedList){
                if(ni.isInteger()){
                    sum += depth * ni.getInteger();
                }else{
                    sum += dfs(ni.getList(), depth + 1);
                }
            }
            return sum;
        }
    }

    364. Nested List Weight Sum II

    这题要求权重随着层数增加而减少,用BFS,每一层都先把Integer添加到level中,当这层循环结束时level添加进sum中,但是level不归零,上一层的Integer还在level中,所以每多一层就要多计算一次。

    class Solution {
        public int depthSumInverse(List<NestedInteger> nestedList) {
            if(nestedList == null || nestedList.size() == 0) return 0;
            Queue<NestedInteger> q = new LinkedList<>();
            q.addAll(nestedList);
            int sum = 0, level = 0;
            
            while(!q.isEmpty()){
                int size = q.size();
                while(size-- > 0){
                    NestedInteger ni = q.poll();
                    if(ni.isInteger()){
                        level += ni.getInteger();
                    }else{
                        q.addAll(ni.getList());
                    }
                }
                sum += level;
            }
            return sum;
        }
    }
  • 相关阅读:
    图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案
    图片上传-下载-删除等图片管理的若干经验总结2
    HDU 1195 Open the Lock
    HDU 1690 Bus System
    HDU 2647 Reward
    HDU 2680 Choose the best route
    HDU 1596 find the safest road
    POJ 1904 King's Quest
    CDOJ 889 Battle for Silver
    CDOJ 888 Absurdistan Roads
  • 原文地址:https://www.cnblogs.com/Afei-1123/p/12036929.html
Copyright © 2020-2023  润新知