給定一個?m x n
?的矩陣,如果一個元素為?0?,則將其所在行和列的所有元素都設為?0?。請使用?原地?算法。
示例 1:
輸入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 輸出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:
輸入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 輸出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
?
?解題思路
? ? ? ? 方法一:創建m*n的數據記錄哪一個位置是0,空間復雜度O(m*n)
? ? ? ? 方法二:找到為0的位置,將對應的第一列/第一行的值設置為0,第一行會有問題,設置一個標記,若第一行出現0,將標記設置為true,在轉化
解題
? ? ? ? 按照解題思路寫代碼即可,代碼附上
class Solution {public void setZeroes(int[][] matrix) {boolean flag = false; //標記int row = matrix.length;int col = matrix[0].length;for (int i = 0; i < row; i++) {if (matrix[i][0] == 0) flag = true;for (int j = 1; j < col; j++) {if (matrix[i][j] == 0) {matrix[i][0] = matrix[0][j] = 0;}}}//將第一列和第一行值為0的整個設置為0for (int i = row - 1; i >= 0; i--) {for (int j = col - 1; j >= 1; j--) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}if (flag) matrix[i][0] = 0;}}
}