162.Set Matrix Zeroes-矩阵归零(中等题)
来源:互联网 发布:java 连接池框架 编辑:程序博客网 时间:2024/05/18 01:17
矩阵归零
题目
给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。
需要在原矩阵上完成操作。样例
给出一个矩阵
返回挑战
你是否使用了额外的空间?
一个直接的解决方案是使用 O(MN) 的额外空间,但这并不是一个好的方案。
一个简单的改进方案是使用 O(M + N) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个常数空间的解决方案吗?题解
1.先扫描一遍第一行和第一列,看是否有0,并进行标记。
2.从第二行和第二列开始对矩阵进行遍历,如matrix[i][j]为0,则将matrix[0][j]和matrix[i][0]都设为0。
3.再以2同样的方式进行遍历,对任意matrix[i][j],如果其对应的第1行或第1列的元素为0,则将matrix[i][j]也设置为0。
4.如果步骤1记录的第一行和第一列有0,则将该行列全部置为0。
public class Solution { /** * @param matrix: A list of lists of integers * @return: Void */ public void setZeroes(int[][] matrix) { if(matrix == null || matrix.length == 0) { return; } int rows = matrix.length; int cols = matrix[0].length; boolean firstRowHasZero = false; boolean firstColHasZero = false; for (int i=0;i<cols;i++) { if (matrix[0][i] == 0) { firstRowHasZero = true; break; } } for (int i=0;i<rows;i++) { if (matrix[i][0] == 0) { firstColHasZero = true; break; } } for(int i = 1; i < rows; i++) { for(int j =1; j<cols; j++) { if(matrix[i][j] == 0) { matrix[0][j] = 0; matrix[i][0] = 0; } } } for(int i = 1; i<rows; i++) { for (int j=1; j< cols; j++) { if(matrix[0][j] == 0 || matrix[i][0] == 0) { matrix[i][j] = 0; } } } if(firstRowHasZero) { for(int i = 0; i < cols; i++) { matrix[0][i] = 0; } } if(firstColHasZero) { for(int i = 0; i < rows; i++) { matrix[i][0] = 0; } } }}
Last Update 2016.10.18
0 0
- 162.Set Matrix Zeroes-矩阵归零(中等题)
- [Lintcode] Set Matrix Zeroes矩阵归零
- leetcode Set Matrix Zeroes矩阵设置零
- 【矩阵】Set Matrix Zeroes
- (每日算法)LeetCode--Set Matrix Zeroes (矩阵置零)
- LeetCode-73 Set Matrix Zeroes(设置零矩阵)
- Leetcode 73. Set Matrix Zeroes 矩阵置零 解题报告
- leetcode 73. Set Matrix Zeroes-矩阵置零|数组
- 【LeetCode-面试算法经典-Java实现】【070-Set Matrix Zeroes(矩阵置零)】
- Set Matrix Zeroes 行列置零 常量空间(重)
- LeetCode2.1.20 @ Set Matrix Zeroes 矩阵部分元素置零 D3F5
- LeetCode | Set Matrix Zeroes(矩阵相应行列清零)
- LeetCode 73. Set Matrix Zeroes(矩阵清零)
- n*m 矩阵: set matrix zeroes
- 374.Spiral Matrix-螺旋矩阵(中等题)
- 381.Spiral Matrix II-螺旋矩阵 II(中等题)
- 矩阵归零
- 矩阵归零
- linux命令总结(三)
- Eclipse中用两个控制台测试网络通信程序
- 洛谷 P1518 两只塔姆沃斯牛
- 多线程二
- JavaScript 控制(改变)canvas(画布)的大小
- 162.Set Matrix Zeroes-矩阵归零(中等题)
- SwipeRefreshLayout添加listview下拉冲突问题
- iOS逆向工程
- Cursor源码梳理
- Linux设置静态IP
- 如何安装 sass
- Intel Code Challenge Elimination Round (Div.1 + Div.2, combined)E. Research Rover (容斥Lucas)
- Timer和TimerTask详解
- 解决spark-shell执行官方sparkstreaming 报 only one sparkcontext maybe running in this jvm的错误