【每日一题】LeetCode 73. 矩阵置零 TypeScript

给定一个 mxn 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法**。**

示例 1:

复制代码
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

复制代码
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -231 <= matrix[i][j] <= 231 - 1

核心思路:

1.先标记第0行、第0列有没有0;

2.从第1行第1列开始遍历每一项,如果===0,则把对应行的第0列置为0,把对应列的第0行置为0;

3.再次从第1行第1列开始遍历,如果所在行的第0列是0,就把对应行的所有列都置为0;存在所在列的第0行是0,就把对应列的所有行都置为0;

4.最后根据标记,处理第0行和第0列

第0行存在0,就把整个第0行都置为0;

第0列存在0,就把整个第0列都置为0;

TypeScript 复制代码
/**
 Do not return anything, modify matrix in-place instead.
 */
function setZeroes(matrix: number[][]): void {
    const rows = matrix.length
    const cols = matrix[0].length

    let firstrow:boolean = false
    let firstcol:boolean = false

    for(let i=0;i<rows;i++){
        if(matrix[i][0]===0){
            firstcol = true
            break
        }
    }

    for(let j=0;j<cols;j++){
        if(matrix[0][j] === 0){
            firstrow = true
            break
        }
    }

    for(let i=1;i<rows;i++){
        for(let j=1;j<cols;j++){
            if(matrix[i][j] === 0){
                matrix[i][0] = 0
                matrix[0][j] = 0
            }
        }
    }

    for(let i=1;i<rows;i++){
        for(let j=1;j<cols;j++){
            if(matrix[i][0] === 0||matrix[0][j] === 0){
                matrix[i][j] = 0
            }
        }
    }

    if(firstcol){
        for(let i=0;i<rows;i++){
            matrix[i][0] = 0
        }
    }

    if(firstrow){
        for(let j=0;j<cols;j++){
            matrix[0][j] = 0
        }
    }
};

共勉