leetcode[73] Set Matrix Zeroes 将矩阵置零
给定一个矩阵,把零值所在的行和列都置为零。例如:
1 2 3
1 3
1 1 1
操作之后变为
1 3
0 0 0
1 1
方法1:
赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零。额外空间为O(m*n).
方法2:
两个数组,bool[m] 和 bool[n] 分别存某行有零,后者某列有零。之后根据数组值将原矩阵相应位置置零。额外空间O(m + n)。
- class Solution {
- public:
- void setZeroes(vector<vector<int> > &matrix) {
- int len1 = matrix.size();
- if (len1 == ) return ;
- int len2 = matrix[].size();
- if (len2 == ) return ;
- vector<bool > row(len1), col(len2);
- for (int i = ; i < len1; i++)
- for (int j = ; j < len2; j++)
- {
- if (matrix[i][j] == )
- {
- row[i] = true; col[j] = true;
- }
- }
- for (int i = ; i < len1; i++)
- for (int j = ; j < len2; j++)
- {
- if (row[i] == true)
- matrix[i][j] = ;
- else if (col[j] == true)
- matrix[i][j] = ;
- }
- return ;
- }
- };
方法3:(常数额外空间)
1. 找到一个零的位置,把这行这列当做方法2中的两个数组存值。
2. 根据1的位置的所在行和列的值是否有零将矩阵相应位置置零。
3. 再把1中零所在位置的行和列置零。
- class Solution {
- public:
- void setZeroes(vector<vector<int> > &matrix) {
- int len1 = matrix.size();
- if (len1 == ) return ;
- int len2 = matrix[].size();
- if (len2 == ) return ;
- int row = -, col = -;
- for (int i = ; i < len1; i++)
- for (int j = ; j < len2; j++)
- {
- if (matrix[i][j] == )
- {
- row = i; col = j;
- }
- }
- if (row == -) return;
- for (int i = ; i < len1; i++)
- for (int j = ; j < len2; j++)
- {
- if (matrix[i][j] == && i != row && j != col)
- {
- matrix[i][col] = ;
- matrix[row][j] = ;
- }
- }
- for (int i = ; i < len1; i++)
- for (int j = ; j < len2; j++)
- {
- if (i != row && j != col)
- {
- if (matrix[i][col] == )
- matrix[i][j] = ;
- else if (matrix[row][j] == )
- matrix[i][j] = ;
- }
- }
- int index = -;
- while(++index < len1) matrix[index][col] = ;
- index = -;
- while(++index < len2) matrix[row][index] = ;
- return ;
- }
- };
2015/03/25:
Python:
用第一行和第一列记录这一行和这一列中是否有零,当然,一开始要先用row和col记录第一行和第一列是否有零,最后再根据这个判断是否将第一行第一列置零
- class Solution:
- # @param matrix, a list of lists of integers
- # @return nothing (void), do not return anything, MODIFY matrix IN PLACE.
- def setZeroes(self, matrix):
- if len(matrix) == 0:
- return ;
- row, col = 1, 1
- for i in range(0, len(matrix)):
- if matrix[i][0] == 0:
- col = 0
- for j in range(0, len(matrix[0])):
- if matrix[0][j] == 0:
- row = 0
- for i in range(1, len(matrix)):
- for j in range(1, len(matrix[0])):
- if matrix[i][j] == 0:
- matrix[i][0] = 0
- matrix[0][j] = 0
- for i in range(1, len(matrix)):
- for j in range(1, len(matrix[0])):
- if matrix[i][0] == 0 or matrix[0][j] == 0:
- matrix[i][j] = 0
- if col == 0:
- for i in range(0, len(matrix)):
- matrix[i][0] = 0
- if row == 0:
- for j in range(0, len(matrix[0])):
- matrix[0][j] = 0
leetcode[73] Set Matrix Zeroes 将矩阵置零的更多相关文章
- LeetCode 73. Set Matrix Zeros(矩阵赋零)
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click ...
- 力扣—set matrix zeroes (矩阵置零) python实现
题目描述: 中文: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 英文: Given a m x n matrix, if an eleme ...
- LeetCode第[73]题(Java):Set Matrix Zeroes(矩阵置0)
题目:矩阵置0 难度:Easy 题目内容: Given a m x n matrix, if an element is 0, set its entire row and column to 0. ...
- [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. Exampl ...
- [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. Follow ...
- Leetcode#73 Set Matrix Zeroes
原题地址 用矩形的第一行和第一列充当mask 代码: void setZeroes(vector<vector<int> > &matrix) { ].empty()) ...
- 73. Set Matrix Zeroes 把矩阵同一行列的元素都改成0
[抄题]: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. ...
- LeetCode:矩阵置零【73】
LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], ...
- Java实现 LeetCode 73 矩阵置零
73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ...
随机推荐
- SQL开发中容易忽视的一些小地方(五)
原文:SQL开发中容易忽视的一些小地方(五) 背景: 索引分类:众所周知,索引分为聚集索引和非聚集索引. 索引优点:加速数据查询. 问题:然而我们真的清楚索引的应用吗?你写的查询语句是否能充分应用上索 ...
- HDU 3788 和九度OJ 1006测试数据是不一样的
ZOJ问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Online网站集
http://tool.oschina.net/apidocs/ 在线工具(IT技术工具)
- hdu4419 Colourful Rectangle 12年杭州网络赛 扫描线+线段树
题意:给定n个矩形,每个矩形有一种颜色,RGB中的一种.相交的部分可能为RG,RB,GB,RGB,问这n个矩形覆盖的面积中,7种颜色的面积分别为多少 思路:把x轴离散化做扫描线,线段树维护一个扫描区间 ...
- Android内置下拉刷新组件SwipeRefreshLayout
也许下拉刷新之前,你可能会使用一些第三方的开源库,例如PullToRefresh, ActionBar-PullToRefresh等待,但现在有的正式组成部分---SwipeRefreshLayout ...
- ubuntu分屏终端
一:更新source 列表: 将/etc/apt/sources.list的镜像源改为网易源:http://mirrors.163.com/ubuntu/dists/ deb http://mirro ...
- Do a “git export” (like “svn export”)?(转)
Probably the simplest way to achieve this is with git archive. If you really need just the expanded ...
- oracle 11g 自己主动调整
--:自己主动调教计划 begin dbms_workload_repository.create_snapshot(); end; select /*+ result_cache */ coun ...
- Android - 错: java.lang.IllegalStateException: Already attached
错: java.lang.IllegalStateException: Already attached 本文地址: http://blog.csdn.net/caroline_wendy 可能原因: ...
- Android学习----异常(2):Please ensure that adb is correctly located at ' ... '
打开任务管理器,在后台进程中找到 kadb,结束这个进程,重新启动eclipse.