码迷,mamicode.com
首页 > 其他好文 > 详细

73. Set Matrix Zeroes 矩阵赋零

时间:2018-12-05 10:24:42      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:cli   ext   ==   space   and   false   str   保存   ace   

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

click to show follow up.

Follow up:

Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?

这道题我们可以通过不使用额外空间的方法完成,也就是使用矩阵的第一行和第一列保存状态,首先进行循环判断第一行和第一列是否含有0,随后对矩阵的每个元素进行循环,若果该元素为零则把该元素的第一行第一列都赋值为零,循环处理完矩阵中的每个元素后便对矩阵的第一行和第一列进行循环,如果第一行和第一列有元素为0则把对应的这一行或这一列都赋值为0,这里需要注意这一步的循环必须跳过第一行和第一列自身,否则会出现矩阵中所有的元素都被赋值为0的情况,最后根据我们一开始保存的矩阵第一行第一列是否含有0的状态值判断是否要把第一行和第一列全部赋值为0.

class Solution {
    public void setZeroes(int[][] matrix) {
        boolean isFirstRow = false; //
        boolean isFirstColumn = false; //
        for(int i=0;i<matrix.length;i++){
            if(matrix[i][0]==0){
                isFirstRow = true;
                break;
            }
        }
        for(int i=0;i<matrix[0].length;i++){
            if(matrix[0][i]==0){
                isFirstColumn = true;
                break;
            }
        }
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){
                if(matrix[i][j]==0){
                    matrix[i][0]=0;
                    matrix[0][j]=0;
                }
            }
        }
        
        for(int i=1;i<matrix.length;i++){
            if(matrix[i][0]==0){
                for(int j=0;j<matrix[0].length;j++){
                    matrix[i][j]=0;
                }
            }
        }
        for(int i=1;i<matrix[0].length;i++){
            if(matrix[0][i]==0){
                for(int j=0;j<matrix.length;j++){
                    matrix[j][i]=0;
                }
            }
        }
        if(isFirstRow){
            for(int i=0;i<matrix.length;i++){
                matrix[i][0]=0;
            }
        }
        if(isFirstColumn){
            for(int i=0;i<matrix[0].length;i++){
                matrix[0][i]=0;
            }
        }
        
    }
}

 

73. Set Matrix Zeroes 矩阵赋零

标签:cli   ext   ==   space   and   false   str   保存   ace   

原文地址:https://www.cnblogs.com/gaofanshi/p/10068817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!