zoukankan      html  css  js  c++  java
  • Set Matrix Zeroes

    Set Matrix Zeroes

    问题:

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

    思路:

      用标记数组进行标记

    我的代码:

    public class Solution {
        public void setZeroes(int[][] matrix) {
            if(matrix == null || matrix.length == 0 || matrix[0].length == 0)   return;
            int m = matrix.length;
            int n = matrix[0].length;
            int[] row = new int[m];
            int[] col = new int[n];
            for(int i = 0; i < m; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    if(matrix[i][j] == 0)
                    {
                        row[i] = 1;
                        col[j] = 1;
                    }
                }
            }
            
            for(int i = 0; i < m; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    if(row[i] == 1 || col[j] == 1)
                    {
                        matrix[i][j] = 0;
                    }
                }
            }
            return;
        }
    }
    View Code

    他人代码:

    public class Solution {
         // using O(m+n) is easy, to enable O(1), we have to use the space within the matrix   
        public void setZeroes(int[][] matrix) {
            if(matrix == null || matrix.length == 0)
                return;
            
            int rows = matrix.length;
            int cols = matrix[0].length;
            
            boolean empty_row0 = false;
            boolean empty_col0 = false;
            for(int i = 0; i < cols; i++){
                if(matrix[0][i] == 0){
                    empty_row0 = true;
                    break;
                }
            }
            
            for(int i = 0; i < rows; i++){
                if(matrix[i][0] == 0){
                    empty_col0 = true;
                    break;
                }
            }
            
            for(int i = 1; i < rows; i++) {
                for(int j =1; j<cols; j++){
                    if(matrix[i][j] == 0){
                        matrix[0][j] = 0;
                        matrix[i][0] = 0;
                    }
                }
            }
            
            for(int i = 1; i<rows; i++) {
                for (int j=1; j< cols; j++) {
                    if(matrix[0][j] == 0 || matrix[i][0] == 0)
                        matrix[i][j] = 0;
                }
            }
          
            if(empty_row0){
                for(int i = 0; i < cols; i++){
                    matrix[0][i] = 0;
                }           
            }
            
            if(empty_col0){
                for(int i = 0; i < rows; i++){
                    matrix[i][0] = 0;
                }           
            }
    
        }
    }
    View Code

    学习之处:

    • 此题本身的特点在于使用标记数组进行标记哪一行和那一列有zero
    • 我的代码采用了额外的空间O(m+n),而他人的代码里面直接把标记藏在了自己的人中,典型的藏富于民,这样便节省了空间。
    • 由此看来降低空间复杂度:1、增加时间复杂度 多次循环 2、用自己的空间进行存储,藏于自身
  • 相关阅读:
    python 发邮件乱码
    膳魔师杯使用注意事项
    了解指针,分分钟的事情 C++筆記--指針
    海淘攻略
    【转】Cocos2dx.3x入门三部曲
    在Windows7上搭建Cocos2d-x 3.2alpha0开发环境
    黑苹果 MAC OS X 10.10.2 安装流程
    Linux 下如何查找木马并处理
    js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
    泰*网 Centos 一些命令
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4331457.html
Copyright © 2011-2022 走看看