适合网站设计的gif图片,兰州网站推广建设公司,用adsl做网站备案,导航到光明城市给定一个由 0 和 1 组成的矩阵#xff0c;找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
示例 1: 输入:
0 0 0 0 1 0 0 0 0 输出:
0 0 0 0 1 0 0 0 0 示例 2: 输入:
0 0 0 0 1 0 1 1 1 输出:
0 0 0 0 1 0 1 2 1 注意:
给定矩阵的元素个数不超过 10000。…给定一个由 0 和 1 组成的矩阵找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
示例 1: 输入:
0 0 0 0 1 0 0 0 0 输出:
0 0 0 0 1 0 0 0 0 示例 2: 输入:
0 0 0 0 1 0 1 1 1 输出:
0 0 0 0 1 0 1 2 1 注意:
给定矩阵的元素个数不超过 10000。 给定矩阵中至少有一个元素是 0。 矩阵中的元素只在四个方向上相邻: 上、下、左、右。
代码
方法一动态规划
class Solution { public int[][] updateMatrix(int[][] matrix) { int dp[][] new int[matrix.length][matrix[0].length]; if(matrix.length0){ return dp; } for(int i0;imatrix.length;i){ for(int j0;jmatrix[0].length;j){ if(matrix[i][j]1){ dp[i][j]matrix.lengthmatrix[0].length; } } } for(int i0;imatrix.length;i){ for(int j0;jmatrix[0].length;j){ if(i0){ dp[i][j] Math.min(dp[i][j],dp[i-1][j]1); } if(j0){ dp[i][j] Math.min(dp[i][j],dp[i][j-1]1); } } } for(int imatrix.length-1;i0;i--){ for(int j0;jmatrix[0].length;j){ if(imatrix.length-1){ dp[i][j] Math.min(dp[i][j],dp[i1][j]1); } if(j0){ dp[i][j] Math.min(dp[i][j],dp[i][j-1]1); } } } for(int imatrix.length-1;i0;i--){ for(int jmatrix[0].length-1;j0;j--){ if(imatrix.length-1){ dp[i][j] Math.min(dp[i][j],dp[i1][j]1); } if(jmatrix[0].length-1){ dp[i][j] Math.min(dp[i][j],dp[i][j1]1); } } } for(int i0;imatrix.length;i){ for(int jmatrix[0].length-1;j0;j--){ if(i0){ dp[i][j] Math.min(dp[i][j],dp[i-1][j]1); } if(jmatrix[0].length-1){ dp[i][j] Math.min(dp[i][j],dp[i][j1]1); } } } return dp; }
}
方法二BFS
class Solution { int[][] vector new int[][]{{0,1},{0,-1},{1,0},{-1,0}}; public int[][] updateMatrix(int[][] matrix) { if(matrix.length0){ return matrix; } Queueint[] queue new LinkedList(); for(int i0;imatrix.length;i){ for(int j0;jmatrix[0].length;j){ if(matrix[i][j]1){ matrix[i][j]matrix.lengthmatrix[0].length; }else{ queue.add(new int[]{i,j}); } } } while(!queue.isEmpty()){ int []s queue.poll(); for(int[] v:vector){ int r s[0]v[0],cs[1]v[1]; if(r0rmatrix.lengthc0cmatrix[0].lengthmatrix[s[0]][s[1]]1matrix[r][c]){ matrix[r][c] matrix[s[0]][s[1]]1;{ queue.add(new int[]{r,c}); } } } } return matrix; }
}