zoukankan      html  css  js  c++  java
  • 73. Set Matrix Zeroes (Array)

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

    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?

    思路:第一行和第一列用来标示该行、该列是否全0,但事先得判断第一行、第一列是否全0=>用两个额外的变量存储

    class Solution {
    public:
        void setZeroes(vector<vector<int> > &matrix) {
            if(matrix.empty()) return;
            
            bool firstLineZero = false;
            bool firstColumnZero = false;
            if(matrix[0][0]==0){
                firstLineZero = true;
                firstColumnZero = true;
            }
            //the first line
            for(int i = 1; i<matrix[0].size(); i++)
            {
                if(matrix[0][i]!=0) continue;
                firstLineZero = true;
                break;
            }
             //the first column
            for(int i = 1; i<matrix.size(); i++)
            {
                if(matrix[i][0]!=0) continue;
                firstColumnZero = true;
                break;
            }
              
            for(int i = 1; i < matrix.size(); i++)
            {
                for(int j = 1; j<matrix[0].size(); j++)
                {
                    if(matrix[i][j] != 0) continue;
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
    
            for(int i = 1; i<matrix[0].size(); i++)
            {
                if(matrix[0][i]!=0) continue;
                for(int j = 1; j<matrix.size(); j++)
                {
                    matrix[j][i]=0;
                }
            }
            for(int i = 1; i<matrix.size(); i++)
            {
                if(matrix[i][0]!=0) continue;
                for(int j = 1; j<matrix[0].size(); j++)
                {
                    matrix[i][j]=0;
                }
            }
            
            if(firstLineZero)
            {
                for(int i = 0 ; i< matrix[0].size(); i++)
                {
                    matrix[0][i] = 0;
                }
            }
            if(firstColumnZero)
            {
                for(int i = 0 ; i< matrix.size(); i++)
                {
                    matrix[i][0] = 0;
                }
            }
        }
    };
  • 相关阅读:
    hibernate 注解text,大文本类型
    ARRAYLIST VECTOR LINKEDLIST 区别与用法(转载)
    Javascript 异步加载详解
    浏览器是怎样工作的(二):渲染引擎,HTML解析
    浏览器是怎样工作的(一):基础知识
    ajax和json
    30+ CSS Grid System
    写好高效CSS的定律
    960网页栅格化总结
    响应式网站之测试工具
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4854678.html
Copyright © 2011-2022 走看看