zoukankan      html  css  js  c++  java
  • Leetcode 73. Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place.

    Example 1:

    Input: 
    [
      [1,1,1],
      [1,0,1],
      [1,1,1]
    ]
    Output: 
    [
      [1,0,1],
      [0,0,0],
      [1,0,1]
    ]
    

    Example 2:

    Input: 
    [
      [0,1,2,0],
      [3,4,5,2],
      [1,3,1,5]
    ]
    Output: 
    [
      [0,0,0,0],
      [0,4,5,0],
      [0,3,1,0]
    ]
    

    Follow up:

    • A straight forward solution using O(mn) space is probably a bad idea.
    • A simple improvement uses O(m + n) space, but still not the best solution.
    • Could you devise a constant space solution?

    • 把首行和首列作为标记位,如果某行某列为0,则相应标记为0。之后再扫描一遍,如果标记位为0,则相应行列都改为0。
    • 需要注意把首行首列提前检查,避免混淆。
     1 class Solution:
     2     def setZeroes(self, matrix: List[List[int]]) -> None:
     3         """
     4         Do not return anything, modify matrix in-place instead.
     5         """
     6         first_row, first_col = False, False
     7         
     8         # check the first row and column first
     9         for i in range( len( matrix ) ):
    10             if matrix[i][0] == 0:
    11                 first_col = True;
    12                 break;
    13                 
    14         for i in range( len( matrix[0] ) ):
    15             if matrix[0][i] == 0:
    16                 first_row = True;
    17                 break;
    18                 
    19         # use the first row and column as marker
    20         for i in range( 1, len( matrix ) ):
    21             for j in range( 1, len( matrix[0] ) ):
    22                 if matrix[i][j] == 0:
    23                     matrix[i][0], matrix[0][j] = 0, 0;
    24         
    25         for i in range( 1, len( matrix ) ):
    26             for j in range( 1, len( matrix[0] ) ):
    27                 if matrix[i][0] == 0 or matrix[0][j] == 0:
    28                     matrix[i][j] = 0
    29                     
    30         if first_row:
    31             for i in range( len( matrix[0] ) ):
    32                 matrix[0][i] = 0;
    33                 
    34         if first_col:
    35             for i in range( len( matrix ) ):
    36                 matrix[i][0] = 0;
    View Code
  • 相关阅读:
    SQL注入过滤
    ASP.NET长文章分页
    简单的权限管理类
    不错的面试题
    【转载】【重要】Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结
    回到xwindows
    suse11 linux不自动启动xwindows
    flash的几种工具
    mencoder和ffmpeg参数详解
    ffmpeg和Mencoder使用实例小全
  • 原文地址:https://www.cnblogs.com/pegasus923/p/11128473.html
Copyright © 2011-2022 走看看