LeetCode 零矩阵

零矩阵

先看题目
零矩阵

这道题还是一道比较简单的题,我看到这道题的第一反应是遇到0,就把0的行和列进行更新,但是一想发现不对,如果这样做的话,输出出来的矩阵就是个全0矩阵了。我想肯定有朋友是跟我一样的想法。于是我就换一个一个思路,把矩阵中0的位置记录下来,然后再进行循环,把0的行和列中的数组赋值为0。

贴代码

    /**
     * 这道题的坑是发现0后不能立即把n行n列全部置为0,否则整个矩阵就都是0了。避免了这个问题,这道题就迎刃而解了
     * @param matrix
     */
    public static int[][] setZeroes(int[][] matrix) {
        // 使用list记录列位置
        List<int[][]> list = new ArrayList<>();
        // 行位置
        int length = matrix.length;
        for (int i = 0; i < length; i++) {
            int ilength = matrix[i].length;
            for (int j = 0; j < ilength; j++) {
                if(0 == matrix[i][j]){
                    // 获取行和列
                    int[][] index = {{i,j}};
                    // 记录0的位置
                    list.add(index);
                }
            }
        }

        // 找到行位置后,将该位置对应的行和列更新成0,这步遍历二维数组,得到一维数组
        list.stream().forEach(t -> {
            // 遍历一维数组,得到具体的值
            for (int i = 0; i < t.length; i++) {
                // 循环次数取决于入参一维数组的长度
                for (int k = 0; k < matrix[i].length; k++) {
                        // 更新行
                        // t[i]获取一维数组,[0]获取行数,不需要获取列,因为这里只对行操作,列无关紧要
                        // k自增就相当于是遍历这一行每一个数了
                        matrix[t[i][0]][k] = 0;
                }
                // 循环次数取决于入参数组中包含多少个一维数组
                for (int l = 0; l < length; l++) {
                    // 更新列
                    // l自增可以获取每一列上的数
                    matrix[l][t[i][1]] = 0;
                }

            }
        });

        return matrix;
    }

每次写完自己的算法,再看官方的题解,都能有一种豁然开朗的感觉,官方居然是用一个boolean数组进行记录,真的是又简洁又易懂,看来自己还是有很大的进步空间的。加油!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值