zoukankan      html  css  js  c++  java
  • 【LeetCode】Set Matrix Zeroes 解题报告

    今天看到CSDN博客的勋章换了图表,同一时候也添加显示了博客等级,看起来都听清新的,感觉不错!

    【题目】

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

    click to show follow up.

    Follow up:

    Did you use extra space?
    A straight forward solution using O(mn) space is probably a bad idea.
    A simple improvement uses O(m + n) space, but still not the best solution.
    Could you devise a constant space solution?

    【思路】

    我直接看了以下的要求,最先想到的就是O(m+n)的空间,就是加一行一列来标记哪行哪列有0;反而是O(mn)的空间不知该怎么利用了。

    接下来想O(1)空间,略微一想,居然想到了答案,就是相比用O(m+n)的空间,不额外加一行一列,就用第一行和第一列来存储哪行哪列有0。当然,这样做比較麻烦的是第一行第一列的原始信息,须要先保存下来。

    前两次写的时候,因为第一行第一列没有处理好,导致WA。

    AC后看网上答案,看到其它人也是这么一个思路,挺高兴的。

    【Java代码,O(1)空间】

    public class Solution {
        public void setZeroes(int[][] matrix) {
            int m = matrix.length;
            int n = matrix[0].length;
            int i, j;
            
            //先标记第一行和第一列是否有0
            boolean firstRow = false, firstCol = false;
            for (j = 0; j < n; j++) {
                if (0 == matrix[0][j]) {
                    firstRow = true;
                    break;
                }
            }
            for (i = 0; i < m; i++) {
                if (0 == matrix[i][0]) {
                    firstCol = true;
                    break;
                }
            }
             
            //从第二行第二列还是遍历,假设遇到0,则把它所在行和列的第一个值设为0   
            for (i = 1; i < m; i++) {
                for (j = 1; j < n; j++) {
                    if (0 == matrix[i][j]) {
                        matrix[i][0] = 0;
                        matrix[0][j] = 0;
                    }
                }
            }
            
            //把第一列的0所在行都设为0,把第一行的0所在列都设为0
            for (i = 1; i < m; i++) {
                if (0 == matrix[i][0]) {
                    for (j = 1; j < n; j++) {
                        matrix[i][j] = 0;
                    }
                }
            }
            for (j = 1; j < n; j++) {
                if (0 == matrix[0][j]) {
                    for (i = 1; i < m; i++) {
                        matrix[i][j] = 0;
                    }
                }
            }
            
            //依据标记决定第一行和第一列是否全设为0
            if (firstRow) {
                for (j = 0; j < n; j++) {
                    matrix[0][j] = 0;
                }
            }
            if (firstCol) {
                for (i = 0; i < m; i++) {
                    matrix[i][0] = 0;
                }
            }
        }
    }


  • 相关阅读:
    harbor 报错,注意harbor.yml文件格式。
    nginx中rewrite文件
    改善github网络连接
    代码层实现六种质量属性战术
    读漫谈架构有感
    “淘宝网”的六个质量属性的六个常见属性
    寒假学习进度16:tensorflow2.0 波士顿房价预测
    寒假学习进度15:tensorflow2.0 优化器
    寒假学习进度14:对mnist数据集实现逻辑回归
    寒假学习进度13:tensorflow2.0 mnist简介
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4496907.html
Copyright © 2011-2022 走看看