LeetCode上矩阵置零,中等难度,记录下解题思路
给一个二维数组,在数组中出现0的位置的行列都要设置为0,之后返回设置后的数组
思路是
- 第一遍循环数组,记录下0元素的行列,分别保存在两个数组中
- 第二遍遍历,将两个数组对应行列的元素全部转换为0
有一点小优化是,JavaScript提供set数据结构,能够自动去重,这样能够保证保存的行列数据不重复,减少计算量
var setZeroes = function(matrix) {
// 保存二维数组长度
let m = matrix.length
let n = matrix[0].length
if (!m || !n) return matrix
// 设置两个set用于保存行列
let col = new Set()
let row = new Set()
// 第一次循环
for(let i = 0; i < m; i++){
for(let j = 0; j < n; j++){
// 如果当前元素为0,保存行列
if (matrix[i][j] === 0){
row.add(i)
col.add(j)
}
}
}
// 第二次循环,循环整个数组
for(let i = 0; i < m; i++){
for(let j = 0; j < n; j++){
// 如果这行或者这列出现在set中,那么就要设为0
if (row.has(i) || col.has(j)) {
matrix[i][j] = 0
}
}
}
return matrix
};