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(mn) 的额外空间,但这并不是一个好的解决方案。
    • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
    • 你能想出一个常数空间的解决方案吗?
    class Solution {
        public void setZeroes(int[][] matrix) {
            //将第一行,第一列作为标志位,从第二行,第二列开始遍历
            int m = matrix.length;
            int n = matrix[0].length;
            boolean r_has0 = false;
            boolean c_has0 = false;
            for(int j = 0;j < n;j++){
                if(matrix[0][j] == 0){
                    r_has0 = true;
                    break;
                }
            }
            for(int i = 0;i < m;i++){
                if(matrix[i][0] == 0){
                    c_has0 = true;
                    break;
                }
            }
            
            //将0行0列作为标志位
            for(int i = 1;i < m;i++){
                for(int j = 1;j < n;j++){
                    if(matrix[i][j] == 0){
                        matrix[i][0] = matrix[0][j] = 0;
                    }
                }
            }
            //置0
            for(int i = 1;i < m;i++){
                for(int j = 1;j < n;j++){
                    if(matrix[i][0] == 0 || matrix[0][j] == 0){
                        matrix[i][j] = 0;
                    }
                }
            }
            //0行0列最后处理
            if(r_has0){
                //将第一行全部置为0
                for(int j = 0;j < n;j++){
                    matrix[0][j] = 0;
                }
            }
            if(c_has0){
                for(int i = 0;i < m;i++){
                    matrix[i][0] = 0;
                }
            }
            
        }
    }
    一回生,二回熟
  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12676174.html
Copyright © 2011-2022 走看看