給定一個 m x n 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。
進階:
一個直觀的解決方案是使用 O(mn) 的額外空間,但這并不是一個好的解決方案。
一個簡單的改進方案是使用 O(m + n) 的額外空間,但這仍然不是最好的解決方案。
你能想出一個僅使用常量空間的解決方案嗎?
示例 1:
輸入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
輸出:[[1,0,1],[0,0,0],[1,0,1]]
解題思路
將需要變為0的行列,直接標記在第一行和第一列上,但是因為如果matrix[0][0]的位置為零,可能存在3種可能1.第一行中就出現了0元素 2.第一列出現了0元素 3.matrix[0][0]為零,因此需要用兩個boolean值表示前兩種情況
代碼
class Solution {public void setZeroes(int[][] matrix) {int n=matrix.length,m=matrix[0].length;boolean row=false,col=false;for (int j = 0; j < m; j++)if(matrix[0][j]==0)row=true;for (int j = 0; j < n; j++)if(matrix[j][0]==0)col=true; for (int i = 1; i < n; i++) {for (int j = 1; j < m; j++) {if(matrix[i][j]==0){matrix[i][0]=0;matrix[0][j]=0;}}}for (int i = 1; i < n; i++) {if(matrix[i][0]==0)for (int j = 0; j < m; j++)matrix[i][j]=0;}for (int j = 1; j < m; j++)if(matrix[0][j]==0)for (int i = 0; i < n; i++)matrix[i][j]=0;if(row)for (int j = 0; j < m; j++)matrix[0][j]=0;if(col)for (int i = 0; i < n; i++)matrix[i][0]=0;}
}