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

[LeetCode] 73. Set Matrix Zeroes

时间:2020-02-14 10:51:07      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:return   param   leetcode   normal   not   nbsp   etc   例子   ase   

矩阵赋零。题意是给一个二维矩阵,如果其中有任何一个元素为0,请将0所在的行和列全都赋值为0。要求in-place做。例子,

Example 1:

Input: 
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
Output: 
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

Example 2:

Input: 
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
Output: 
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]

数组类型的题有好几道都明确要求不能使用额外空间,这题也不例外。因为不能用到额外空间,所以只能将是否需要赋零的flag记录在input的数组里面,这里我选择记录在第一行和第一列上。但是我此时仍然需要两个flag来分别记录第一行和第一列上有没有0。因为第一行和第一列上的0有可能是因着记录里面的行和列的结果而被赋值成0的。

这个题需要对input数组扫描两次,第一次扫描的时候,当扫描到某个位置matrix[i][j]的时候,如果它是0,就需要把这个元素所在的行matrix[0][j]和列matrix[i][0]上的第一个元素也标记成0;同时判断如果当前位置的横坐标或者纵坐标是0的话,就需要把row或者column改成true。

第二次扫描的时候,需要从第二行和第二列开始扫描,如果碰到0,就把这个元素所在的行和列都赋值为0。最后再判断两个flag,如果flag为true,则需要把第一行或者第一列也赋值为0。

时间O(mn)

空间O(1)

 1 /**
 2  * @param {number[][]} matrix
 3  * @return {void} Do not return anything, modify matrix in-place instead.
 4  */
 5 var setZeroes = function (matrix) {
 6     // corner case
 7     if (matrix === null || matrix.length === 0) return;
 8 
 9     // normal case
10     let m = matrix.length;
11     let n = matrix[0].length;
12     let row = false;
13     let col = false;
14     for (let i = 0; i < m; i++) {
15         for (let j = 0; j < n; j++) {
16             if (matrix[i][j] === 0) {
17                 matrix[0][j] = 0;
18                 matrix[i][0] = 0;
19                 if (i === 0) row = true;
20                 if (j === 0) col = true;
21             }
22         }
23     }
24 
25     // starting from the seond row and second column
26     for (let i = 1; i < m; i++) {
27         if (matrix[i][0] === 0) {
28             for (let j = 1; j < n; j++) {
29                 matrix[i][j] = 0;
30             }
31         }
32     }
33     for (let j = 1; j < n; j++) {
34         if (matrix[0][j] === 0) {
35             for (let i = 1; i < m; i++) {
36                 matrix[i][j] = 0;
37             }
38         }
39     }
40     if (row) {
41         for (let j = 0; j < n; j++) {
42             matrix[0][j] = 0;
43         }
44     }
45     if (col) {
46         for (let i = 0; i < m; i++) {
47             matrix[i][0] = 0;
48         }
49     }
50 }

 

[LeetCode] 73. Set Matrix Zeroes

标签:return   param   leetcode   normal   not   nbsp   etc   例子   ase   

原文地址:https://www.cnblogs.com/aaronliu1991/p/12306174.html

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