Set Matrix Zeroes
来源:互联网 发布:知乎法国婆婆 编辑:程序博客网 时间:2024/06/06 14:27
题目大意:给一个m行n列的二维数组,如果某一个位置的值是0,就将该位置所在的整行和整列的值都设置为0.进一步的要求是:额外需要的空间能否控制在O(1) space。
思路分析:第一种直观的思路是使用O(m+n)额外的空间,通过遍历二维数组记录哪些行和哪些列的值将会被全部置为0。第一种思路的代码如下:
void setZeroes(int** matrix, int matrixRowSize, int matrixColSize) { int i, j, flag; int *row, *col; row = (int*)malloc(sizeof(int) * matrixRowSize); col = (int*)malloc(sizeof(int) * matrixColSize); for(i=0; i<matrixRowSize; i++) { row[i] = 0; } for(i=0; i<matrixColSize; i++) { col[i] = 0; } for(i=0; i<matrixRowSize; i++) { for(j=0; j<matrixColSize; j++) { if(matrix[i][j] == 0) { row[i] = 1; col[j] = 1; } } } for(i=0; i<matrixRowSize; i++) { if(row[i]==1) { for(j=0; j<matrixColSize; j++) { matrix[i][j] = 0; } } } for(i=0; i<matrixColSize; i++) { if(col[i]==1) { for(j=0; j<matrixRowSize; j++) { matrix[j][i] = 0; } } }}
第二种思路,考虑到额外的空间控制在O(1)space,所以可以将原二维数组的第一行和第一列利用起来,存储那些某行或者某列需要全部置为0的位置。比如说除第一行和第一列之外的第i行和第j列的值为0,那么就将matrix[i][0]和matri[0][j]的值都置为0用来记住某行和某列需要全部置为0,但是原来的第一行和第一列的值我们需要先进行处理,如果原数组的第一行有0,那么最后这一样要全部变成0,如果原数组第一列有0,那么第一列最后也要全部变成0,所以先用两个flag来标记一下第一行和第一列的情况。代码如下:void setZeroes(int** matrix, int matrixRowSize, int matrixColSize) { int i, j; int rflag=0, cflag=0; for(i=0; i<matrixColSize; i++) { if(matrix[0][i] == 0) { rflag = 1; } } for(i=0; i<matrixRowSize; i++) { if(matrix[i][0] == 0) { cflag = 1; } } for(i=1; i<matrixRowSize; i++) { for(j=1; j<matrixColSize; j++) { if(matrix[i][j] == 0) { matrix[i][0] = 0; matrix[0][j] = 0; } } } for(i=1; i<matrixRowSize; i++) { if(matrix[i][0] == 0) { for(j=1; j<matrixColSize; j++) { matrix[i][j] = 0; } } } for(i=1; i<matrixColSize; i++) { if(matrix[0][i] == 0) { for(j=1; j<matrixRowSize; j++) { matrix[j][i] = 0; } } } if(cflag) { for(i=0; i<matrixRowSize; i++) { matrix[i][0] = 0; } } if(rflag) { for(i=0; i<matrixColSize; i++) { matrix[0][i] = 0; } }}
0 0
- LeetCode: Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- LeetCode Set Matrix Zeroes
- [Leetcode] Set Matrix Zeroes
- LeetCode: Set Matrix Zeroes
- Set Matrix Zeroes
- Leetcode: Set Matrix Zeroes
- [LeetCode] Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- [LeetCode]Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- [leetcode]Set Matrix Zeroes
- Leetcode:Set Matrix Zeroes
- Set Matrix Zeroes
- 拦截器最后一讲-使用拦截器完成权限控制
- python numpy 模块学习
- Python List 、 tuple和dict
- epoll的理解
- Android开发之使用MediaRecorder录制视频
- Set Matrix Zeroes
- 九度OJ 1360:乐透之猜数游戏 (递归)
- Python 变量类型自带函数介绍
- Using Oracle SQL Developer to Setup SQL*Loader Runs
- 安卓学习笔记
- 1004. 成绩排名
- 深入理解IIS的多线程工作机制--学习了
- Python 常用模块使用
- Maven学习六:搭建多模块企业级项目