• 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
            }
             
        }
    }
    
  • 相关阅读:
    dubbo-Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
    sqlmap基本命令
    Read-Only Tables 只读表
    Oracle Set操作
    OGG-00664
    Oracle 附加日志(supplemental log)
    Oracle 数字转为字符串 to_char()
    Oracle单引号转义符
    OGG开启DDL,约束信息和索引信息会同步过去吗
    OGG-01161
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13356177.html
Copyright © 2020-2023  润新知