<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;
    }
}
原文地址:https://www.cnblogs.com/Afei-1123/p/12036929.html