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

    题目:

    给定一个 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(mn) 的额外空间,但这并不是一个好的解决方案。
    • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
    • 你能想出一个常数空间的解决方案吗?

    思路:

    空间复杂度 O(2) ,用两个布尔变量就可以解决。方法就是利用数组的首行和首列来记录 0 值。从数组下标的 A[1][1] 开始遍历,两个布尔值记录首行首列是否需要置0

     1 class Solution {
     2     public void setZeroes(int[][] matrix) {
     3         boolean rowFlag = false;
     4         //判断首行
     5         for (int i = 0; i < matrix[0].length; i++) {
     6             if (matrix[0][i] == 0) {
     7                 rowFlag = true;
     8                 break;
     9             }
    10         }
    11 
    12         boolean colFlag = false;
    13         for (int i = 0; i < matrix.length; i++) {
    14             if (matrix[i][0] == 0) {
    15                 colFlag = true;
    16                 break;
    17             }
    18         }
    19 
    20         for (int i = 1; i < matrix.length; i++) {
    21             for (int j = 1; j < matrix[0].length; j++) {
    22                 if (matrix[i][j] == 0){
    23                     matrix[i][0] = 0;
    24                     matrix[0][j] = 0;
    25                 }
    26             }
    27         }
    28 
    29         for (int i = 1; i < matrix[0].length; i++) {
    30             if (matrix[0][i] == 0) {
    31                 for (int j = 0; j < matrix.length; j++) {
    32                     matrix[j][i] = 0;
    33                 }
    34             }
    35         }
    36 
    37         for (int i = 1; i < matrix.length; i++) {
    38             if (matrix[i][0] == 0) {
    39                 for (int j = 0; j < matrix[0].length; j++) {
    40                     matrix[i][j] = 0;
    41                 }
    42             }
    43         }
    44         if (rowFlag){
    45             for (int i = 0; i < matrix[0].length; i++) {
    46                 matrix[0][i] = 0;
    47             }
    48         }
    49         if (colFlag){
    50             for (int i = 0; i < matrix.length; i++) {
    51                 matrix[i][0] = 0;
    52             }
    53         }
    54     }
    55 }
  • 相关阅读:
    Android笔记之interface
    Android笔记之数据库操作
    Android笔记之sharedPrefenses
    Android笔记之数组的使用
    Android笔记之TableLayout布局
    Android笔记之Progress进度条
    StringBuffer调整空间
    git创建与合并分支
    git版本回退
    github设置分支push权限
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10641323.html
Copyright © 2011-2022 走看看