刚充值了一波信仰,贴篇代码过个瘾~今日高产赛母猪
前不久做了一道题,把一个二维数组内0所在行列都置0。
一开始写的是这样的:
for (int i = 0; i < m; ++i ) { for (int j = 0; j < n; ++j) { if ( 0 == ar[i][j]) { ar[i][0] == 0; ar[0][j] == 0; } } ] for (int i = 0; i < m; ++i) { if ( 0 == ar[i][0]){ for (int j = 0; j < n; ++j) ar[i][j] = 0 } } for (int j = 0; j < n; ++j) { if ( 0 == ar[0][j]){ for (int i = 0; i < m; ++i) ar[i][j] = 0 } }
然后被指出这段代码有很大的问题,它直接将0所在行列清0,后面会导致整个数组都变成0。于是在师兄指导下改为将遍历到0的行列记录 清空再继续检查。新代码如下:
void SetZero(int **data, int r, int c) { /**
* Set_zero
* URL: xiaohudie
* 2017-1-21
*/
in *zeroCols = new int[c];//建立辅助空间 memset(zeroCols, 0, sizeof(int)*c); bool isZeroRow = false; //逐行查找0 for (int i = 0; i < r; i++) { isZeroRow = false; for (int j = 0; j < c; j++) { if (!data[i][j]) { isZeroRow = true; zeroCols[j] = 1; } } if (isZeroRow) { memset(data[i], 0, sizeof(int)*c);//清 } } //逐列查找0 for (int j = 0; j<c; j++) { if (zeroCols[j]) { for (int i = 0; i < r; i++) { data[i][j] = 0; } } } }
欢迎各位继续指正~
另外晒一波信仰哈哈
圣手二代104忍者白青轴 一本满足~
set_zero is coded by http://xiaohudie.net. Any posts here is one hundred percent original, so please keep my link so as not to hurt this pretty girl. -
博主你用的啥语言哟,c++?感觉像java
仿佛看到键盘在敲击+1s
博客主题好看的!