LeetCode(七)数组操作-#73

73. 矩阵置零

1.题目描述及示例

  1. 题目描述
    给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。

  2. 示例
    在这里插入图片描述
    在这里插入图片描述

2.题解思路及代码

  1. 思路
    (1)必须得先假设所有的输入矩阵中不含某个数字,我这里设为1000,当然可以是其他数,我没一个个试。
    (2)对矩阵中的每个数遍历,遇到0就将其所在的行和列上的数全置为1000,然后再对矩阵进行遍历,遇到1000就将该数字置为0。所以要先假设所有的输入矩阵中不含1000,不然就可能把原来就为1000的数也置为0。
    (3)这种方式只能保证空间复杂度为常量,但时间复杂度高,因为题目要求用常量空间解决问题。
  2. 代码
//这里我用递归方式解决的,但还不如用普通方式
    public void setZeroes(int[][] matrix) {
        
        int unique=1000;
        
        if (matrix==null||matrix.length==0)
            return;

        for (int i=0;i<matrix.length;i++)
            for (int j=0;j<matrix[0].length;j++)
            {
                if (matrix[i][j]==0)
                    setZero(matrix,i,j,unique);
            }

        for (int i=0;i<matrix.length;i++)
            for (int j=0;j<matrix[0].length;j++)
            {
                if (matrix[i][j]==unique)
                    matrix[i][j]=0;
            }
    }

    public void setZero(int[][] matrix,int i,int j,int unique) {
               for (int jj=j-1;jj>=0;jj--)
        {
            if (matrix[i][jj]!=0)
                matrix[i][jj]=unique;

        }
        for (int ii=i-1;ii>=0;ii--)
        {
            if (matrix[ii][j]!=0)
                matrix[ii][j]=unique;

        }
        for (int jj=j+1;jj<matrix[0].length;jj++)
        {
            if (matrix[i][jj]!=0)
                matrix[i][jj]=unique;
            else  if (matrix[i][jj]==0)
            {
                setZero(matrix,i,jj,unique);
            }
        }
        for (int ii=i+1;ii<matrix.length;ii++)
        {
            if (matrix[ii][j]!=0)
                matrix[ii][j]=unique;
            else if (matrix[ii][j]==0)
            {
                setZero(matrix,ii,j,unique);
            }
        }

    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值