[LeetCode] 73. Set Matrix Zeroes Java
阿新 • • 發佈:2017-12-21
ger 是否 -s could ret ext hash blog span
題目:
iven a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
click to show follow up.
Follow up:Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?
題意及分析:如果一個矩陣的元素為0,那麽其所在行和所在列都設置為0,能不能使用空間復雜度為o(1)
代碼一:遍歷matrix,分別用兩個集合記錄需要變化的行和列,然後在遍歷設置,空間復雜度為0(m+ns)
1 class Solution { 2 public void setZeroes(int[][] matrix) { 3 int row = matrix.length; 4 if(row==0) return; 5 int col = matrix[0].length; 6 7 Set<Integer> rowSet = newHashSet<>(); 8 Set<Integer> colSet = new HashSet<>(); 9 10 for(int i=0;i<row;i++){ 11 for(int j=0;j<col;j++){ 12 if(matrix[i][j]==0){ 13 rowSet.add(i); 14 colSet.add(j); 15 } 16} 17 } 18 19 //行 20 Iterator<Integer> iterator = rowSet.iterator(); 21 while(iterator.hasNext()){ 22 Integer res = iterator.next(); 23 for(int i=0;i<col;i++){ 24 matrix[res][i] = 0; 25 } 26 } 27 28 iterator = colSet.iterator(); 29 while(iterator.hasNext()){ 30 Integer res = iterator.next(); 31 for(int i=0;i<row;i++){ 32 matrix[i][res] = 0; 33 } 34 } 35 } 36 }
代碼二:不使用額外空間的方法類似,就是把第一行和第一列作為標記。 首先 先判斷第一行第一列是否含有0,並用兩個bool變量記錄起來。這樣,遍歷一遍之後就把所有的行和列都在第一行和第一列中體現出來。接下來就是,根據第一行和第一列的0元素,把其所在的行和列置0,不包括第一行和第一列。
1 class Solution { 2 public void setZeroes(int[][] matrix) { 3 int row = matrix.length; 4 if(row==0) return;; 5 int col = matrix[0].length; 6 boolean fr = false,fc = false; 7 for(int i=0;i<row;i++){ 8 for(int j=0;j<col;j++){ 9 if(matrix[i][j]==0){ 10 if(i == 0) fr = true; 11 if(j == 0) fc = true; 12 matrix[0][j]=0; 13 matrix[i][0]=0; 14 } 15 } 16 } 17 //根據第一行和第一列的0元素,把其所在的行和列置0,不包括第一行和第一列。 18 for(int i=1;i<row;i++) { 19 for (int j = 1; j < col; j++) { 20 if(matrix[i][0] == 0 || matrix[0][j] == 0) { 21 matrix[i][j] = 0; 22 } 23 } 24 } 25 26 27 //最後如果第一行有或者第一列原來就有為0的元素,置為0 28 if(fr){ 29 for(int i=0;i<col;i++){ 30 matrix[0][i] = 0; 31 } 32 } 33 if(fc) { 34 for(int i = 0; i < row; i++) { 35 matrix[i][0] = 0; 36 } 37 } 38 } 39 }
[LeetCode] 73. Set Matrix Zeroes Java