矩阵置零(原地变换)

将矩阵中0元素的行和列都变成0,如果正常做非常好做,只要遍历一遍记录0的位置,然后第二遍遍历将该行和列变成0即可。但这样需要用到空间复杂度为O(mn)时间O(m+n)
第二种在找0 的过程中就把矩阵中的行和列都变成一个设置的值(不是0),第二遍遍历将这种值的位置都变成0,但这样每个0元素都会遍历m+n次,所以为O(mn)*(m+n)空间为O(1)
第三种在找到0后将列首和行首的两个元素变成0,这样只需遍历两个即可给行和列赋值,不用重复赋值,但要注意第一行和第一列的第一个都是0,0,所以需要额外用一个变量标志第一列是否需要变0.标志完后从(1,1)开始看这个位置是否需要变0,再看第一行是否需要变。完成后再看第一列单独是否需要赋值。(记得时先看行再看列,因为行需要看0,0,别让列先变了)。
时间为O(mn),空间为O(1)

class Solution {
   
    public void setZeroes(int[][] matrix) {
   
        if(matrix==null || matrix.length==0)return;
        boolean colNeed=false;
        for(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值