将矩阵中0元素的行和列都变成0,如果正常做非常好做,只要遍历一遍记录0的位置,然后第二遍遍历将该行和列变成0即可。但这样需要用到空间复杂度为O(mn)时间O(m+n)
第二种在找0 的过程中就把矩阵中的行和列都变成一个设置的值(不是0),第二遍遍历将这种值的位置都变成0,但这样每个0元素都会遍历m+n次,所以为O(mn)*(m+n)空间为O(1)
第三种在找到0后将列首和行首的两个元素变成0,这样只需遍历两个即可给行和列赋值,不用重复赋值,但要注意第一行和第一列的第一个都是0,0,所以需要额外用一个变量标志第一列是否需要变0.标志完后从(1,1)开始看这个位置是否需要变0,再看第一行是否需要变。完成后再看第一列单独是否需要赋值。(记得时先看行再看列,因为行需要看0,0,别让列先变了)。
时间为O(mn),空间为O(1)
class Solution {
public void setZeroes(int[][] matrix) {
if(matrix==null || matrix.length==0)return;
boolean colNeed=false;
for(