[leedcode 73] Set Matrix Zeroes

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

public class Solution {
    public void setZeroes(int[][] matrix) {
        //题目要求不使用额外空间,因此需要借助矩阵本身的空间来辅助存储,
        //这里借用了矩阵的第一行和第一列来辅助纪录该行或该列是否为0.由于第一行第一列自身发生了改变,再用两个变量记录第一行和第一列是否为         //0即可。
        int rlen=matrix.length;
        int clen=matrix[0].length;
        int row=1;
        int col=1;
        for(int i=0;i<rlen;i++){
            if(matrix[i][0]==0){
                col=0;
                break;
            }
        }
        for(int i=0;i<clen;i++){
            if(matrix[0][i]==0){
                row=0;
                break;
            }
        }

        for(int i=1;i<rlen;i++){//注意:不需要特殊考虑第1行和第1列,因为只需保证原值即可!!
            for(int j=1;j<clen;j++){
                    if(matrix[i][j]==0){
                        matrix[i][0]=0;
                        matrix[0][j]=0;
                    }
            }
        }
        for(int i=1;i<rlen;i++){
            for(int j=1;j<clen;j++){
                if(matrix[i][0]==0||matrix[0][j]==0)
                    matrix[i][j]=0;
            }
        }
        if(row==0){
            for(int i=0;i<clen;i++){
               matrix[0][i]=0; 
            }
            
        }
        if(col==0){
            for(int i=0;i<rlen;i++){
                matrix[i][0]=0;
            }
        }
        
        
    }
}

 

posted @ 2015-07-14 17:10  ~每天进步一点点~  阅读(138)  评论(0编辑  收藏  举报