zoukankan      html  css  js  c++  java
  • <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;
        }
    }
  • 相关阅读:
    asp.net mvc本地程序集和GAC的程序集冲突解决方法
    SolrCloud-如何在.NET程序中使用
    Application Initialization Module for IIS 7.5
    CentOS 6.5/6.6 安装mysql 5.7 最完整版教程
    NHibernate one-to-one
    “Invalid maximum heap size” when running Maven
    初涉RxAndroid结合Glide实现多图片载入操作
    【案例分析】Linux下怎样查看port占用情况
    js学习之--Bootstrap Modals(模态框)
    sdut2852 小鑫去爬山9dp入门)
  • 原文地址:https://www.cnblogs.com/Afei-1123/p/12036929.html
Copyright © 2011-2022 走看看