73.矩阵置零
描述
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
思路及代码
思路
暂且不管题目中要求原地算法。不管白猫还是黑猫。能抓住老鼠就是好猫。于是我就大胆的开始想方法啦。
既然要把0所在的行和列都要置为0,首先要把出现0的位置记录下来。然后就有下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
let setZeroes = function(matrix) { let rec = []; for(let i = 0;i<matrix.length;i++){ for(let j = 0;j<matrix[i].length;j++){ if(matrix[i][j] === 0){ rec.push(i,j); } } } zero(matrix,rec) };
|
记录了0出现的位置,比如rec = [1,1,2,2],就要把第一行和第一列置为0,把第二行和第二列置为0.对rec进行循环时间隔为2.
1 2 3 4 5 6 7 8 9 10 11 12
| function zero(matrix,rec){ let len = rec.length; for(let i = 0;i<len-1;i+=2){ let m = rec[i],n=rec[i+1]; for(let j = 0;j<matrix[0].length;j++){ matrix[m][j] = 0; } for(let k = 0;k<matrix.length;k++){ matrix[k][n] = 0; } } }
|
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
function zero(matrix,rec){ let len = rec.length; for(let i = 0;i<len-1;i+=2){ let m = rec[i],n=rec[i+1]; for(let j = 0;j<matrix[0].length;j++){ matrix[m][j] = 0; } for(let k = 0;k<matrix.length;k++){ matrix[k][n] = 0; } } } let setZeroes = function(matrix) { let rec = []; for(let i = 0;i<matrix.length;i++){ for(let j = 0;j<matrix[i].length;j++){ if(matrix[i][j] === 0){ rec.push(i,j); } } } zero(matrix,rec) };
|