一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
一、题目
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
作者:力扣 (LeetCode) 链接:leetcode-cn.com/leetbook/re…
来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
二、思路
思路1
- 定义数组
col长度和row长度,同时定义横纵坐标出现0的位置 - 这里通过
new Array(colLen).fill(false),new Array(rowLen).fill(false)填充横纵坐标值 - 定义了横纵坐标出现的位置
- 这是我们再通过双层
for循环,判断坐标出现ture的时候,将当前坐标的值的横纵坐标都改为0 - 注意看给赋值
0的判断 - 如果
col[i]值为true或者row[j]值为true,任意条件成立。 - 这里就可以给横纵坐标都赋值给0,这样就发现,横纵坐标都会得到修改。
注意:这里重要的是横纵坐标的标记,首先通过
true标记其实已经得到了要想的数据,这里再通过二次的循环,将数据替换掉,得到真实答案。
三、代码
思路1代码
let setZeroes = function(matrix) {
/**
* 定义数组col长度和row长度,同时定义横纵坐标出现0的位置
* 这里通过new Array(colLen).fill(false),new Array(rowLen).fill(false)
* 定义了横纵坐标出现的位置
*
* 这是我们再通过双层for循环,判断坐标出现ture的时候,将当前坐标的值的横纵坐标都改为0
*
* */
let colLen = matrix.length, rowLen = matrix[0].length
let col = new Array(colLen).fill(false), row = new Array(rowLen).fill(false)
for(let i = 0; i < colLen; i++) {
for(let j = 0; j < rowLen; j++) {
if(matrix[i][j] == 0) {
col[i] = row[j] = true
}
}
}
for(let i = 0; i < colLen; i++) {
for(let j = 0; j < rowLen; j++) {
if(col[i] || row[j]) {
matrix[i][j] = 0
}
}
}
}
setZeroes(matrix)