给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法
题目描述
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 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] ]
思路
1、原地置换,表示空间复杂度要求为 O(1)
2、第一次遍历,记录二维数组中值为 0 的下标,分别记录行号和列号
3、第二次遍历,赋值,如果当前遍历位置的下标只要有一个在之前记录的下标中,就置为 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
|
var setZeroes = function(matrix) { const length = matrix.length const high = matrix[0].length let rowFlag = [], columnFlag = [] for (let i = 0; i < length; i++) { for (let j = 0; j < high; j++) { if (matrix[i][j] === 0) { rowFlag.push(i) columnFlag.push(j) } } } for (let i = 0; i < length; i++) { for (let j = 0; j < high; j++) { if (rowFlag.indexOf(i) > -1 || columnFlag.indexOf(j) > -1) { matrix[i][j] = 0 } } } return matrix }
|