• 第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;
                       }
                   }
               }
           
            }
    }
  • 相关阅读:
    java类型与Hadoop类型之间的转换
    Elasticsearch之四种查询类型和搜索原理(博主推荐)
    Eclipse/MyEclipse如何快速提取变量(最强帮手)
    8592 KMP算法
    SDUT 1304-取数字问题(DFS)
    堆排序(小根堆)
    Android显示GIF图片
    HDU 1007 近期点对
    java 显示目录下全部文件
    UVa 11292
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11707434.html
Copyright © 2020-2023  润新知