Set Matrix Zeroes

1) 预设标准row col,在这里是first row col

2)提前存好original 标准row 和col的状况

ref http://www.cnblogs.com/springfor/p/3888003.html

    public void setZeroes(int[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        if(row*col==0) return;
        
        boolean has0firstRow = false , has0firstCol = false ;// 之后非first row col的0会被记录到first row col,所以现在记录一下first row col是不是有0,免得和之后反水上来的0混淆
        
        for(int i=0; i< col; i++){
            if(matrix[0][i]==0) {
                has0firstRow = true;
                break;
            }
        }
        for(int i=0; i<row; i++){
            if(matrix[i][0]==0) {
                has0firstCol = true;
                break;
            }
        }
        
        // check rest rows col's 0s, put them to the first row/col
        for(int i=1; i<row; i++){
            for(int j=1; j<col; j++){
                if(matrix[i][j]==0){
                    matrix[i][0] =0;
                    matrix[0][j] =0;
                }
            }
        }
        
        // push into 0s according to first row/col
        for(int i=1; i<row; i++){
            for(int j=1; j<col; j++){
                if(matrix[i][0]==0 || matrix[0][j]==0)
                    matrix[i][j] =0;
                }
        }
        
        // check original first row/col
        
        if(has0firstRow){
            for(int i=0; i< col; i++){
                matrix[0][i]=0;
            }
        }
        if(has0firstCol){
            for(int i=0; i< row; i++){ 
                matrix[i][0]=0;
            }
        }
        
        
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值