首页 > 其他 > 详细

第73题:矩阵置零

时间:2019-10-20 16:10:52      阅读:52      评论:0      收藏:0      [点我收藏+]

一. 问题描述

给定一个 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;
                   }
               }
           }
       
        }
}

 

第73题:矩阵置零

原文:https://www.cnblogs.com/xiaobaidashu/p/11707434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!