码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 542. 01 Matrix

时间:2018-09-07 10:58:27      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:题目   list   space   solution   cee   nbsp   NPU   put   get   

原题链接在这里:https://leetcode.com/problems/01-matrix/description/

题目:

Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.

The distance between two adjacent cells is 1.

Example 1: 
Input:

0 0 0
0 1 0
0 0 0

Output:

0 0 0
0 1 0
0 0 0

Example 2: 
Input:

0 0 0
0 1 0
1 1 1

Output:

0 0 0
0 1 0
1 2 1

Note:

  1. The number of elements of the given matrix will not exceed 10,000.
  2. There are at least one 0 in the given matrix.
  3. The cells are adjacent in only four directions: up, down, left and right.

题解:

先把非0点标记成Integer.MAX_VALUE. 然后从每个0点开始做BFS. 若是对周围的点更新出更小的值就把更小值放入queue中用作将来的BFS.

Time Complexity: O(m*n). m = matrix.length, n = matrix[0].length. 每个点最多进入queue 4 次.

Space: O(m*n). queue size.

AC Java:

 1 class Solution {
 2     public int[][] updateMatrix(int[][] matrix) {
 3         if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
 4             return matrix;
 5         }
 6         
 7         int m = matrix.length;
 8         int n = matrix[0].length;
 9         
10         LinkedList<int []> que = new LinkedList<int []>();
11         for(int i = 0; i<m; i++){
12             for(int j = 0; j<n; j++){
13                 if(matrix[i][j] == 0){
14                     que.add(new int[]{i, j});
15                 }else{
16                     matrix[i][j] = Integer.MAX_VALUE;
17                 }
18             }
19         }
20         
21         int [][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
22         
23         while(!que.isEmpty()){
24             int [] cur = que.poll();
25             for(int [] dir : dirs){
26                 int dx = cur[0] + dir[0];
27                 int dy = cur[1] + dir[1];
28                 if(dx<0 || dx>=m || dy<0 || dy>=n || matrix[cur[0]][cur[1]]+1>=matrix[dx][dy]){
29                     continue;
30                 }
31                 
32                 matrix[dx][dy] = matrix[cur[0]][cur[1]]+1;
33                 que.add(new int[]{dx, dy});
34             }
35         }
36         
37         return matrix;
38     }
39 }

 

LeetCode 542. 01 Matrix

标签:题目   list   space   solution   cee   nbsp   NPU   put   get   

原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/9602413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!