zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 24

    Set Matrix Zeroes

    要点:用第一行和第一列来记录本行/列的情况。这里的catch是第一行/列本身的情况会被wipe掉。比如第一行都是1,那么其他列为0会置其为0。这样第一行的信息就没了。用一个变量就可以先记录行列信息。
    错误点

    • 这题之所以总是有confusion,是因为在记录的时候用了另一个小技巧:如果第一行的某一个值已经是0了,那么最终这一列代表的总是0,所以记录的0/1和最终的列情况是一致的。但是这是列信息,而不是对应的第一行的最终情况,因为其他行的同列也可能会把这个设成0。
    • 在最后set行列的时候,不包括第一行/列(因为第一行/列的最终情况是由开始的两个变量决定的,而没有被set成0的位置仍可能保留)。
    • 而记录的时候包括(因为第一行的0也会reset列,对列同样)
    • 因为要分三步走,行列一定别弄混
    class Solution(object):
        def setZeroes(self, matrix):
            """
            :type matrix: List[List[int]]
            :rtype: void Do not return anything, modify matrix in-place instead.
            """
            m = len(matrix)
            n = len(matrix[0])
            # mark first row/col
            firstRow, firstCol = True, True
            for i in range(n):
                if matrix[0][i]==0:
                    firstRow = False
                    break
            for i in range(m):
                if matrix[i][0]==0:
                    firstCol = False
                    break
            
            # mark row/col
            for i in range(m):
                for j in range(n):
                    if matrix[i][j]==0:
                        matrix[0][j]=0
                        matrix[i][0]=0
            
            # set all rows/cols
            for j in range(1,n):
                if matrix[0][j]==0:
                    for i in range(1,m):
                        matrix[i][j]=0
                        
            for i in range(1,m):
                if matrix[i][0]==0:
                    for j in range(1,n):
                        matrix[i][j]=0
            
            if not firstRow:
                for i in range(n):
                    matrix[0][i]=0
            
            if not firstCol:
                for i in range(m):
                    matrix[i][0]=0
                    
    
  • 相关阅读:
    XSS 防御方法总结
    IE浏览器兼容方案
    js 排序算法
    webapck 打包体积优化策略
    webapck 速度优化策略
    Grunt、Gulp和Webpack对比
    数据库中的undo日志、redo日志
    使用sysbench对mysql压力测试
    java -cp & java jar的区别
    使用BenchmarkSQL测试PostgreSQL
  • 原文地址:https://www.cnblogs.com/absolute/p/5678004.html
Copyright © 2011-2022 走看看