zoukankan      html  css  js  c++  java
  • leetcode刷题笔记七十三题 矩阵置零

    leetcode刷题笔记七十三题 矩阵置零

    源地址: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) 的额外空间,但这仍然不是最好的解决方案。
    你能想出一个常数空间的解决方案吗?

    /**
    本题使用常数空间
    使用矩阵的第一行与第一列作为标记,表示该行是否需要置0
    如果分别按行列方向检索,容易出现行检测覆盖列检测情况,需要确定主检测方式,本解法以列为例
    使用boolean变量 isCol标记首列的行元素是否需要置0
    首先遍历除第一列的其他部分,使用isCol标记第一列是否需要置0.使用第一行的其他元素标记本列是否需要置0,用第一列元素标记本行是否要置0
    然后,从(1,1)位置开始,根据(i,0)与(0,j)对其置0
    再处理第一行与第一列
    若(0,0)== 0 ,则将第一行置0
    若 isCol == true, 则将第一列置0
    */
    object Solution {
        def setZeroes(matrix: Array[Array[Int]]): Unit = {
            if(matrix.length == 0) return
            val rowLen = matrix.length
            val colLen = matrix(0).length
            var isCol = false
            
            for(i <- 0 to rowLen-1){
                if(matrix(i)(0) == 0) isCol = true
                for(j <- 1 to colLen-1){
                    if(matrix(i)(j) == 0) {
                        matrix(0)(j) = 0
                        matrix(i)(0) = 0
                    }
                }
            }
    
            for(i <- 1 to rowLen-1){
                for(j <- 1 to colLen-1){
                    if(matrix(i)(0) == 0 || matrix(0)(j) == 0) matrix(i)(j) = 0
                }
            }
    
            if(matrix(0)(0) == 0){
                for(j <- 1 to colLen-1) matrix(0)(j) = 0
            }
    
            if(isCol == true){
                for(i <- 0 to rowLen-1) matrix(i)(0) = 0
            }
             
        }
    }
    
  • 相关阅读:
    2015第14周四
    2015第14周三
    2015第14周二
    2015第14周一
    2015第13周日
    2015第13周六
    2015第13周五
    2015第13周四
    2015第13周三
    2015第13周二
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13356177.html
Copyright © 2011-2022 走看看