< m; i++) {for(int j = 1; j < n; j++) {if(!matrix[i][j]) {matrix[i][0] = matrix[0][j] = 0;}}}//根据第一行和第一列的值更新剩下的元素for(int i = 1; i < m; i++) {for(int j = 1; j < n; j++) {if(!matrix[i][0] || !matrix[0][j]) {matrix[i][j] = 0;}}}//根据第一行和第一列的标志变量更新第一行和第一列的值if(f_row) {for(int i = 0; i < n; i++) {matrix[0][i] = 0;}}if(f_column) {for(int i = 0; i < m; i++) {matrix[i][0] = 0;}}}
只是用一个标记变量标识
1.首先检查第一列是否有0,有的话,标识
2.检查第一行是否有0,有的话[0][0]=0,这个有先后关系,必须先检查列,再检查行
3.和上面一样,利用当前值更新第一行和第一列,利用第一行和第一列更新当前值
4.首先检查[0][0]更新第一行,之后在更新第一列,这个也有顺序 。
这里[0][0]标记行和标记列都是可以的,唯一的不同是,这里标记行,行就要后记录,先处理,标记列,列就要被优先处理
否则会被影响 。
void setZeroes(vector
这里官方的题解,可以拆成上面的样子,但是官方的题解要考虑的内容很多,而且编程技巧很足
多个for循环,组合成一个for循环 。
检查可以分为首先进行第一列检查,之后,在进行第一行检查完成之后,在进行剩下行的检查,虽然写在一个for循环里面,但是又先后顺序
在置位0的时候也是有顺序的,先从最后一行开始置位0,先根据第一行和第一列更新内部,之后,倒着更新,当更新到第一行的时候,根据[0][0]的位置更新
对于第一列,根据更新