Set Matrix Zeroes
2016-09-23 09:43
176 查看
leetcode第73题,要求将一个矩阵内所有零元素所在的行和列全部归零。要求尽可能低的空间复杂度。
低空间复杂度其实就是看如何处理零元素所在位置的记录问题,一开始我用了一个列表记录零元素的坐标位置,这种方法显然比较笨,如果零元素很多,那么这个开辟的内存空间就会逼近矩阵的大小,加上坐标是数值对,因此可能会远远超过矩阵本身。
另一种思路是,让出第一行和第一列,用来标记零元素的位置,一旦该行出现了零元素,就把第一行和第一列的元素归零,第二遍扫的时候只有看第一行和第一列的元素就可以开始归零的操作了。
还有一个细节问题,那就是第一行和第一列如果也有零元素,需要特殊处理,需要实现设置标记位,如果出现了要到最后把第一行第一列清零。
class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
row = len(matrix)
column = len(matrix[0])
first_row = False
first_column = False
for i in range(row):
for j in range(column):
if matrix[i][j] == 0:
if i == 0:
first_row = True
if j == 0:
first_column = True
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, row):
if matrix[i][0] == 0:
for j in range(1, column):
matrix[i][j] = 0
if first_column:
matrix[i][0] = 0
for j in range(1, column):
if matrix[0][j] == 0:
for i in range(1, row):
matrix[i][j] = 0
if first_row:
matrix[0][j] = 0
低空间复杂度其实就是看如何处理零元素所在位置的记录问题,一开始我用了一个列表记录零元素的坐标位置,这种方法显然比较笨,如果零元素很多,那么这个开辟的内存空间就会逼近矩阵的大小,加上坐标是数值对,因此可能会远远超过矩阵本身。
另一种思路是,让出第一行和第一列,用来标记零元素的位置,一旦该行出现了零元素,就把第一行和第一列的元素归零,第二遍扫的时候只有看第一行和第一列的元素就可以开始归零的操作了。
还有一个细节问题,那就是第一行和第一列如果也有零元素,需要特殊处理,需要实现设置标记位,如果出现了要到最后把第一行第一列清零。
class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
row = len(matrix)
column = len(matrix[0])
first_row = False
first_column = False
for i in range(row):
for j in range(column):
if matrix[i][j] == 0:
if i == 0:
first_row = True
if j == 0:
first_column = True
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, row):
if matrix[i][0] == 0:
for j in range(1, column):
matrix[i][j] = 0
if first_column:
matrix[i][0] = 0
for j in range(1, column):
if matrix[0][j] == 0:
for i in range(1, row):
matrix[i][j] = 0
if first_row:
matrix[0][j] = 0
相关文章推荐
- TortoiseSVN客户端重新设置用户名和密码
- Cron 表达式
- Hadoop集群中Hbase的介绍、安装、使用
- 桥接模式和NAT模式区别
- Container With Most Water (Java实现)
- JavaEE开发教程(一)体系结构和环境配置
- 嵌入式应该注意的问题
- input checkbox 与 后面的 label文字对齐
- 关于Android写LOG日志到SD卡文件之microlog4android使用
- windows窗口添加资源
- java自定义的注解类里面一定要有value()方法吗?
- Spring 全局异常处理
- W5500 KEEPALIVE 功能流程简介以及应用
- mysql优化
- node.js + webstorm :配置开发环境
- ADB调试桥安装(方式二)
- 马踏棋盘
- 2016阿里安全峰会资料打包下载[67份PDF]
- Java汉字转拼音
- Windows环境下jenkins +svn+android studio自动化构建(持续集成,打包)