zoukankan      html  css  js  c++  java
  • 73. 矩阵置零

    题目

    代码

    class Solution {
    public:
        void setZeroes(vector<vector<int>>& matrix) {
            if(matrix.size()==0)
                return;
           int lastRow=-1,H=matrix.size(),W=matrix[0].size();
          //找出最后一行 这一行中存在0
           for(int i=H-1;i>=0&&lastRow==-1;i--)
           {
               for(int j=0;j<W;j++)
               {
                   if(matrix[i][j]==0)
                   {
                       lastRow=i;
                       break;
                   }
               }
           }
           if(lastRow==-1)
             return ;
          //从第一行开始将每一行先设置为0,并且把列标记为0
           for(int i=0;i<lastRow;i++)
           {
             bool isZeroRow=false;
             //这一行如果有0则在最后的0行进行标记
             for(int j=0;j<W;j++)
             {
               if(matrix[i][j]==0)
               {
                 isZeroRow=true;
                 matrix[lastRow][j]=0;
               }
             }
             if(isZeroRow)
             for(int j=0;j<W;j++)
             {
               matrix[i][j]=0;
             }
           }
           
           //将每一列设置为0
          for(int i=0;i<H;i++)
          {
            for(int j=0;j<W;j++)
            {
               if(matrix[lastRow][j]==0)
                 matrix[i][j]=0;
            }
          }
          
          //将最后一行设置为0
          for(int j=0;j<W;j++)
          {
            matrix[lastRow][j]=0;
          }
        }
    };

    思路

    利用最后一行带有0的元素来存储这一列是否应该被置于0.然后从第一行开始遍历,发现有0的时候将标记的最后一行中的对应位置赋值为0表示这一列要置0.当遍历完这一行时将这一行置0. 最后再将存储0的最后一行置为0.

    https://github.com/li-zheng-hao
  • 相关阅读:
    ios 封装sqllite3接口
    ios7与ios6UI风格区别
    C/C++面试题
    单链表反转
    字符串倒序输出
    简单选择排序
    插入排序
    冒泡
    快速排序
    C++ new delete(二)
  • 原文地址:https://www.cnblogs.com/lizhenghao126/p/11053608.html
Copyright © 2011-2022 走看看