首页 > 其他分享 >力扣中542 01矩阵

力扣中542 01矩阵

时间:2023-03-09 16:22:44浏览次数:42  
标签:542 01 mat int 题解 矩阵 力扣 遍历 设置

题解1:广度遍历

是从0出发 然后一步能到的设置为1遍历矩阵设为遍历过 入队 再看一步能到的设置为2

 

题解2:动态规划

 

 

 

 

 

改不对 bug是因为没有设置已经遍历过的元素的标识 导致会回找 不断循环 死循环爆栈

算了

public static void main(String[] args) {
        // TODO Auto-generated method stub
        //bug是因为没有设置已经遍历过的元素的标识 导致会回找 不断循环 死循环爆栈
//        int[][] mat= {{1,0,0,0,1,1,1,1,0,1},
//            {1,1,1,1,1,1,1,0,1,0},{1,1,1,1,0,1,0,0,1,1}};
//        int[][] mat= {{1,0,1,1,0,0,1,0,0,1},{0,1,1,0,1,0,1,0,1,1},
//                {0,0,1,0,1,0,0,1,0,0},{1,0,1,0,1,1,1,1,1,1},
//                {0,1,0,1,1,0,0,0,0,1},{0,0,1,0,1,1,1,0,1,0},
//                {0,1,0,1,0,1,0,0,1,1},{1,0,0,0,1,1,1,1,0,1},
//                {1,1,1,1,1,1,1,0,1,0},{1,1,1,1,0,1,0,0,1,1}};
        int[][] mat={{1,1,1},{1,1,0},{1,1,1}};
        int[][]res =Leetcode542.updateMatrix(mat);
        for(int i=0;i<mat.length;i++) {
            for(int j=0;j<mat[0].length;j++) {
                System.out.println(res[i][j]);
            }
        }
                
    }
    public static int[][] updateMatrix(int[][] mat) {
        int row=mat.length,line=mat[0].length;     
        int[][]res=new int[row][line];
        for(int i=0;i<row;i++) {
            for(int j=0;j<line;j++) {
                if(mat[i][j]==0) {
                    res[i][j]=0;
                }
                else{
                    res[i][j]=recent_1(mat,i,j);
                }
            }
        }
        return res;
    }
    public static int recent_1(int[][] mat,int i,int j) {
        
        int row=mat.length,line=mat[0].length;
        int[][]flag=new int[row][line];
        int[] dx= {0,0,-1,1},dy= {1,-1,0,0};
        int res=Integer.MAX_VALUE;
        Queue<int[]> queue =new LinkedList<int[]>();
        flag[i][j]=1;
        for(int k=0;k<4;k++) {
//            int step=1;
            if(i+dx[k]>-1 && i+dx[k]<row && j+dy[k]>-1 && j+dy[k]<line )  {
                flag[i+dx[k]][j+dy[k]]=1;
                if(mat[i+dx[k]][j+dy[k]]==0) {
                    return 1;
                }
                else if(mat[i+dx[k]][j+dy[k]]==1 && flag[i+dx[k]][j+dy[k]]==0) {
                    queue.offer(new int[]{i+dx[k],j+dy[k]});
//                    step=step+1;
                }
            }
            
        }
        while(!queue.isEmpty()) {
            int[]para=queue.poll();
            res=Math.min(res, 1+recent_1(mat,para[0],para[1]));
        }
        queue.clear();
        return res;
    }

 

标签:542,01,mat,int,题解,矩阵,力扣,遍历,设置
From: https://www.cnblogs.com/ayuanjiejie/p/17198698.html

相关文章

  • Windows server2012的DHCP ping通测试
    1.首先创建俩个windowsserver2012版本的虚拟机,进行基础配置时,保证每个虚拟机处在同一lan网段 1.进入虚拟机时关闭俩台设备的防火墙    2.右击右下角的网络图标......
  • 安装oracle 11g odbc驱动,安装visual studio 2019 2022支持ef的工具 entityframework
    安装oracleodbc驱动1.安装Oracle-Client-for-Microsoft-Tools.exe2.下载instantclient-basic-windows.x64-11.2.0.4.0.zip3.下载 instantclient-odbc-windows.x64-1......
  • 第01章_Java语言概述
    吾心安处即吾乡。吾乡何处不可眠1.Java知识脉络图1.1Java基础全程脉络图1.2本章专题与脉络2.抽丝剥茧话Java吾心安处即吾乡。吾乡何处不可眠2.1当前大......
  • 01、为什么要用大数据技术进行安全分析?
    转载公众号《微言晓意》,仅用于个人学习关于安全运营系列文章,在2020年10月份写了篇《安全运营的定义与核心目标》,算是开了个头。后面几个月由于精力不够,内容方向也没有想清......
  • 01、大数据存储技术介绍
    转载公众号《微言晓意》,仅用于个人学习鉴于网络安全数据组成的复杂性、规模,以及对实时搜索响应的需求,需要通过大数据存储集群快速实现空间的扩容,在PB级的安全数据中做到安......
  • 力扣---2379. 得到 K 个黑块的最少涂色次数
    给你一个长度为n下标从0开始的字符串blocks,blocks[i]要么是'W'要么是'B',表示第i块的颜色。字符'W'和'B'分别表示白色和黑色。给你一个整数k,表示想要连......
  • CCF 2015-12
    一:试题编号:2015-12-1试题名称:数位之和时间限制:1.0s内存限制:256.0MB问题描述:问题描述 给定一个十进制整数n,输出n的各位数字之和。输入格式 输入一个整数n。输出格式 输......
  • 天梯赛练习题L3-001 凑零钱(dfs 爆搜)
    https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805054207279104题目大意:给定n个硬币,总共需要我们凑出m块钱。问我们能凑出的硬币的最小字典序......
  • (P01)C++介绍
    文章目录​​1.需要掌握的重要练习​​​​2.为什么要学习C++​​​​3.C++为什么难学​​​​4.C++11值得学习的新特性​​​​5.几本推荐学习C++的书​​​​6.开发工具......
  • mybatis01_mybatis入门
    一、MyBatis简介​ MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。2013年11月迁移到Github......