zoukankan      html  css  js  c++  java
  • 第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;
                       }
                   }
               }
           
            }
    }
  • 相关阅读:
    Odometer使用JavaScript和CSS制作数字滑动效果
    50个必备的实用jQuery代码段
    优化移动体验的HTML5技巧
    20 个非常棒的jQuery内容滑动插件
    最全的js正则表达式用法大全
    大神都未必解决的了简单问题,关于文字左右两端对齐。
    盘点20款表现出众的HTML5游戏
    蓝桥杯 格子问题:输出同行同列同对角线格子的位置
    与曹学长的一番谈话
    21天学习活动之——我的讲课新体验
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11707434.html
Copyright © 2011-2022 走看看