第73题:矩阵置零

一. 问题描述

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。

示例 1:

输入:

[

  [1,1,1],

  [1,0,1],

  [1,1,1]

]

输出:

[

  [1,0,1],

  [0,0,0],

  [1,0,1]

]

示例 2:

输入:

[

  [0,1,2,0],

  [3,4,5,2],

  [1,3,1,5]

]

输出:

[

  [0,0,0,0],

  [0,4,5,0],

  [0,3,1,0]

]

二. 解题思路

解题思路:要求使用原地算法进行求解,空间复杂度O(2)。

步骤一:先遍历第一行和第一列,用两个变量空间判断是否有0。

步骤一:遍历矩阵,将矩阵中0的元素都变换成首行和首列中显示。

步骤二:从首行元素开始进行判断(第一列元素除外),如果有0将该列至0。

步骤三:从首列元素开始进行判断(第一行元素除外),如果有0将该行至0。

步骤四:根据步骤一的两个变量将第一行和第一列是否置0。

三. 执行结果

执行用时 :1 ms, 在所有 java 提交中击败了100.00%的用户

内存消耗 :43.1 MB, 在所有 java 提交中击败了97.99%的用户

四. Java代码

class Solution {
    public void setZeroes(int[][] matrix) {
         boolean row=false;
         boolean col=false;
           for(int i=0;i<matrix.length;i++) {
               if(matrix[i][0]==0)
               {
                   col=true;
                   break;
               }
           }
           for(int j=0;j<matrix[0].length;j++) {
               if(matrix[0][j]==0)
               {
                   row=true;
                   break;
               }
           }
           
           //遍历矩阵,进行步骤二,步骤三
           for(int i=0;i<matrix.length;i++)
               for(int j=0;j<matrix[0].length;j++) {
                   if(matrix[i][j]==0){
                       matrix[0][j]=0;
                       matrix[i][0]=0;
                   }
               }
           
           //步骤四(判断列)
           for(int i=1;i<matrix.length;i++) {
               if(matrix[i][0]==0)
               {
                   for(int j=1;j<matrix[0].length;j++)
                   {
                       matrix[i][j]=0;
                   }
                  
               }
           }
           for(int j=1;j<matrix[0].length;j++) {
               if(matrix[0][j]==0)
               {
                   for(int i=1;i<matrix.length;i++)
                   {
                       matrix[i][j]=0;
                   }
               }
           }
           
           if(row==true||col==true)
           {
               if(row==true)
               {
                   for(int j=0;j<matrix[0].length;j++)
                   {
                       matrix[0][j]=0;
                   }
               }
               
               if(col==true)
               {
                   for(int i=0;i<matrix.length;i++)
                   {
                       matrix[i][0]=0;
                   }
               }
           }
       
        }
}

猜你喜欢

转载自www.cnblogs.com/xiaobaidashu/p/11707434.html
今日推荐