ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Example 1: ``` Input: [ [1,1,1], [1,0,1], [1,1,1] ] Output: [ [1,0,1], [0,0,0], [1,0,1] ] ``` Example 2: ``` Input: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] Output: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ] ``` ``` /** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */ **本题的思路是用第一行来保存其余行中某列是否为0元素。例如:第二行第三列为0,则将第一行第三列置为0,然后将第二行全部置为0。行的方向判断完后,就看第一行哪些元素为0,将0元素所在的列置为0。 不过,直接这样会覆盖原先第一行本就有的0,所以一开始要先遍历第一行,只需记录第一行是否有0,在最后,再根据第一行是否有0,来决定第一行是否需要全部置为0。 于是,具体步骤如下: 1、遍历第一行,看有没有0 2、从第二行开始遍历,若当前行有0,则在第一行中对应列的元素变为0,并将该行都置为0 3、遍历第一行,将0元素所在的列都置为0 4、若第一行本就有0,则将第一行全部置为0 var setZeroes = function(matrix) { let m = matrix.length, n = matrix[0].length let firstRowContains0 = false // 遍历第一行,看有没有0 for (let col = 0; col < n; col++) { if (matrix[0][col] === 0) { firstRowContains0 = true break } } // 从第二行开始遍历 for (let row = 1; row < m; row++) { let thisRowContains0 = false// 若当前行有0, 则在第一行中对应列的元素变为0 for (let col = 0; col < n; col++) { if (matrix[row][col] === 0) { matrix[0][col] = 0 thisRowContains0 = true } }// 若这行有0, 则把这一行都置为0 if (thisRowContains0) { for (let col = 0; col < n; col++) matrix[row][col] = 0 } } // 遍历第一行,将0元素所在的列都置为0 for (let col = 0; col < n; col++) { if (matrix[0][col] === 0) { for (let row = 1; row < m; row++) { matrix[row][col] = 0 } } } // 最后,若第一行本来有0元素,就把第一行都置为0 if (firstRowContains0) { for (let col = 0; col < n; col++) matrix[0][col] = 0 } }; ```