LeetCode上矩陣置零,中等難度,記錄下解題思路
給一個二維數(shù)組,在數(shù)組中出現(xiàn)0的位置的行列都要設(shè)置為0,之后返回設(shè)置后的數(shù)組
思路是
- 第一遍循環(huán)數(shù)組,記錄下0元素的行列,分別保存在兩個數(shù)組中
- 第二遍遍歷,將兩個數(shù)組對應(yīng)行列的元素全部轉(zhuǎn)換為0
有一點小優(yōu)化是,JavaScript提供set數(shù)據(jù)結(jié)構(gòu),能夠自動去重,這樣能夠保證保存的行列數(shù)據(jù)不重復(fù),減少計算量
var setZeroes = function(matrix) {
// 保存二維數(shù)組長度
let m = matrix.length
let n = matrix[0].length
if (!m || !n) return matrix
// 設(shè)置兩個set用于保存行列
let col = new Set()
let row = new Set()
// 第一次循環(huán)
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)
}
}
}
// 第二次循環(huán),循環(huán)整個數(shù)組
for(let i = 0; i < m; i++){
for(let j = 0; j < n; j++){
// 如果這行或者這列出現(xiàn)在set中,那么就要設(shè)為0
if (row.has(i) || col.has(j)) {
matrix[i][j] = 0
}
}
}
return matrix
};