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;
                }
            }
            
        }
    }
    一回生,二回熟
  • 相关阅读:
    rails 给类添加属性
    workflow engine Ruote初体验之二(通用属性)
    workflow engine Ruote初体验之一(概念)
    workflow engine Ruote 安装
    文字编码
    C# 制作Windows服务安装包
    Ruby on rails初体验(三)
    18-语言入门-18-鸡兔同笼
    17-语言入门-17-笨小熊
    16-语言入门-16-谁获得了最高奖学金
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12676174.html
Copyright © 2011-2022 走看看