73. 矩阵置零

思路

  这题要求在原地修改,空间复杂度为常数级。这题的主要思路在于用第一行第一列来保存整行整列是否为0的状态。用两个bool变量储存第一行和第一列后续是否需要变动。你可能会想如果改变第一行第一列的值但是第一行第一列本来不需要变,那怎么找回原有的值?这个不用担心,因为只要中间有了0,这个第一行或者第一列的标识迟早也会变成0,只不过早变晚变的原因。
  这里需要注意的一点为[0][0]的位置,如果你在给每行每列赋值的时候从这个位置开始的话,会影响第一行第一列这个用来暂存的全部数据,导致全部变成0。那会不会漏掉第一行第一列?这两个bool变量就是负责第一行第一列的不用担心。

代码示例

func setZeroes(matrix [][]int)  {
    var cowB bool
    var coluB bool

    for i:=0;i<len(matrix);i++{
        if matrix[i][0]==0{
            coluB=true
            break;
        }
    }

    for i:=0;i<len(matrix[0]);i++{
        if matrix[0][i]==0{
            cowB=true
            break;
        }
    }

    for i:=1;i<len(matrix);i++{
        for j:=1;j<len(matrix[0]);j++{
            if matrix[i][j]==0{
                matrix[i][0]=0
                matrix[0][j]=0
            }
        }
    }

    for i:=1;i<len(matrix);i++{
        if matrix[i][0]==0{
            for j:=0;j<len(matrix[0]);j++{
                matrix[i][j]=0
            }
        }
    }

    for i:=1;i<len(matrix[0]);i++{
        if matrix[0][i]==0{
            for j:=0;j<len(matrix);j++{
                matrix[j][i]=0
            }
        }
    }

    if cowB{
        for i:=0;i<len(matrix[0]);i++{
            matrix[0][i]=0
        }
    }

    if coluB{
        for i:=0;i<len(matrix);i++{
            matrix[i][0]=0
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值