空间复杂度O(m+n),记录要变为0的行和列(m+n)
时间复杂度O(2mn) => O(m*n)
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 28 29 30 31 32
|
var setZeroes = function (matrix) { const row = matrix.length; const col = matrix[0].length; const zeroRow = Array(row).fill(false); const zeroCol = Array(col).fill(false); for (let i = 0; i < row; ++i) { for (let j = 0; j < col; ++j) { if (matrix[i][j] === 0) { zeroRow[i] = true; zeroCol[j] = true; } } } for (let i = 0; i < row; ++i) { if (!zeroRow[i]) continue; for (let j = 0; j < col; ++j) { matrix[i][j] = 0; } } for (let i = 0; i < col; ++i) { if (!zeroCol[i]) continue; for (let j = 0; j < row; ++j) { matrix[j][i] = 0; } } return matrix; };
|
优化到常量的空间复杂度
通过首行,首列来标记是否要置零
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
var setZeroes = function (matrix) { const rowLen = matrix.length; const colLen = matrix[0].length; let firstRowZero = false, firstColZero = false; for (let i = 0; i < rowLen; i++) { if (matrix[i][0] === 0) { firstColZero = true; } } for (let i = 0; i < colLen; i++) { if (matrix[0][i] === 0) { firstRowZero = true; } } for (let i = 1; i < rowLen; i++) { for (let j = 1; j < colLen; j++) { if (matrix[i][j] === 0) { matrix[i][0] = 0; matrix[0][j] = 0; } } } for (let i = 1; i < rowLen; i++) { for (let j = 1; j < colLen; j++) { if (matrix[i][0] === 0 || matrix[0][j] === 0) { matrix[i][j] = 0; } } } if (firstRowZero) { for (let i = 0; i < colLen; i++) { matrix[0][i] = 0; } } if (firstColZero) { for (let i = 0; i < rowLen; i++) { matrix[i][0] = 0; } } return matrix; };
|