Leetcode 73.Set Matrix Zeroes

看起来很容易,但是按照正常的思路来解却有很多坑,    如果一个值==0, 那么它所在的那行和列全部设为0,  好像表面看起来直接根据这个逻辑写个for循环就AC了, 但是实际上要考虑一个问题就是会出现递归的情况, 就是设为0以后 这些变成0的值又执行了上述的这个逻辑,这就比较麻烦了。  但是 实际上出现这种情况的原因自己跑一遍逻辑就会发现是[i][0] [0][j]这些元素搞的鬼。 所以做赋值操作的时候从索引1开始。 

class Solution {
    public void setZeroes(int[][] matrix) {
        boolean zeroCol = false;
        boolean zeroRow = false;
// 如果第一列有值为0 , 那么第一列全部要设成0, 但不是现在设, 否则会影响下面的 for循环判定
        for(int i = 0; i < matrix.length; i++) {
            if(matrix[i][0] == 0) {
                zeroCol = true;
                break;
            }
        }
// 同理     
        for(int j = 0; j < matrix[0].length; j++) {
            if(matrix[0][j] == 0) {
                zeroRow = true;
                break;
            }
        }
// 现在这个[i][0] [0][j]为0的原因避免了 第一列和第一行有值为0的干扰。        
        for(int i = 1; i < matrix.length; i++) {
            for(int j = 1; j < matrix[0].length; j++) {
                if(matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
// 避免了干扰之后 这个时候[i][0] [0][j] = 0的情况就可以放心大胆的给[i][j]赋0了
        for(int i = 1; i < matrix.length; i++) {
            for(int j = 1; j < matrix[0].length; j++) {
                if(matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
        }
        
        if(zeroRow == true) {
            for(int j = 0; j < matrix[0].length; j++) {
                matrix[0][j] = 0;
            }
        }
        
        if(zeroCol == true) {
            for(int i = 0; i < matrix.length; i++) {
                matrix[i][0] = 0;
            }
        }
        
        
        
    
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值