Leetcode: Set Matrix Zeroes
来源:互联网 发布:东坡软件下载 编辑:程序博客网 时间:2024/06/06 17:27
题目链接:
https://leetcode.com/problems/set-matrix-zeroes/#/description
题目大意:
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
解题思路:
因为题目要求最好不要额外的空间,也就是只能使用O(1) 的空间解决问题。做题遇到的问题是,如果遇到matrix[i][j]==0 的时候就更新正行或者整列的值为0,那么就将会影响后续的判断,不知道后面的0是由于前面更新所致还是原本的值就是0。所以为了不影响后续的判断,我们用矩阵的第0行和第0列去存贮,如下:
- 当matrix[i][j]==0时,将matrix[0][j]=0,matrix[i][0]=0;
- 特殊的是matrix[0][0] 一个值不能表示行和列两种情况,所以使用两个变量:boolean firstR ,firstC 表示开始行和开始列是否存在0的情况;
也就是第一次遍历做好记录工作 - 第二次遍历则将matrix[i][0]==0的行全部设置为0;将matrix[0][j] ==0的列全部设置为0
- 最后根据firstR和firstC设置第0行和第0列的值;
代码如下:
public class Solution { public void setZeroes(int[][] matrix) { boolean firstR = false; boolean firstC = false; int row = matrix.length; int col = matrix[0].length; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(matrix[i][j]==0){ if(i==0) firstR = true; if(j==0) firstC = true; matrix[0][j] = 0; matrix[i][0] = 0; } } } for(int i=1;i<row;i++){ for(int j=1;j<col;j++){ if(matrix[i][0]==0||matrix[0][j]==0) matrix[i][j]=0; } } if(firstR){ for(int i=1;i<col;i++) matrix[0][i]=0; } if(firstC){ for(int i=1;i<row;i++) matrix[i][0] = 0; } }}
运行效果
0 0
- LeetCode: Set Matrix Zeroes
- LeetCode Set Matrix Zeroes
- [Leetcode] Set Matrix Zeroes
- LeetCode: Set Matrix Zeroes
- Leetcode: Set Matrix Zeroes
- [LeetCode] Set Matrix Zeroes
- [LeetCode]Set Matrix Zeroes
- [leetcode]Set Matrix Zeroes
- Leetcode:Set Matrix Zeroes
- LeetCode-Set Matrix Zeroes
- [leetcode] Set Matrix Zeroes
- LeetCode - Set Matrix Zeroes
- Set Matrix Zeroes leetcode
- 【Leetcode】Set Matrix Zeroes
- 【leetcode】Set Matrix Zeroes
- Leetcode: Set Matrix Zeroes
- Leetcode Set Matrix Zeroes
- LeetCode | Set Matrix Zeroes
- 螺旋矩阵 II
- 客户端显示2008连接上却实2005数据库
- prophet:时间序列预测模型原理
- Shell 编程入门
- simple_factory
- Leetcode: Set Matrix Zeroes
- 支付宝安卓端调用说明
- qt中筛选出最小的未被占用的串口号
- WebSphere MQ使用
- 路由基础(三)静态现网用法
- 九度oj 题目1435:迷瘴
- 设计模式之装饰者模式Decorator
- 数据科学的完整学习路径—Python版(转载)
- java HelloWorld