给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 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;

    /**
     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
            }
        }
    };

    共勉

    更多推荐