标签:
题目:
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
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?
题解:
解法一:用额外空间
1 public void setZeroes(int[][] matrix) { 2 int m = matrix.length; 3 int n = matrix[0].length; 4 5 if(m==0||n==0) 6 return; 7 int[] flagr = new int[m]; 8 int[] flagc = new int[n]; 9 10 for(int i=0;i<m;i++){ 11 for(int j=0;j<n;j++){ 12 if(matrix[i][j]==0){ 13 flagr[i]= 1; 14 flagc[j]= 1; 15 } 16 } 17 } 18 19 for(int i=0;i<m;i++){ 20 for(int j=0;j<n;j++){ 21 if(flagr[i]==1||flagc[j]==1){ 22 matrix[i][j]=0; 23 } 24 } 25 } 26 }
解法二:不需要额外空间
1 public void setZeroes(int[][] matrix) { 2 int rownum = matrix.length; 3 if (rownum == 0) return; 4 int colnum = matrix[0].length; 5 if (colnum == 0) return; 6 7 boolean hasZeroFirstRow = false, hasZeroFirstColumn = false; 8 9 // Does first row have zero? 10 for (int j = 0; j < colnum; ++j) { 11 if (matrix[0][j] == 0) { 12 hasZeroFirstRow = true; 13 break; 14 } 15 } 16 17 // Does first column have zero? 18 for (int i = 0; i < rownum; ++i) { 19 if (matrix[i][0] == 0) { 20 hasZeroFirstColumn = true; 21 break; 22 } 23 } 24 25 // find zeroes and store the info in first row and column 26 for (int i = 1; i < matrix.length; ++i) { 27 for (int j = 1; j < matrix[0].length; ++j) { 28 if (matrix[i][j] == 0) { 29 matrix[i][0] = 0; 30 matrix[0][j] = 0; 31 } 32 } 33 } 34 35 // set zeroes except the first row and column 36 for (int i = 1; i < matrix.length; ++i) { 37 for (int j = 1; j < matrix[0].length; ++j) { 38 if (matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0; 39 } 40 } 41 42 // set zeroes for first row and column if needed 43 if (hasZeroFirstRow) { 44 for (int j = 0; j < colnum; ++j) { 45 matrix[0][j] = 0; 46 } 47 } 48 if (hasZeroFirstColumn) { 49 for (int i = 0; i < rownum; ++i) { 50 matrix[i][0] = 0; 51 } 52 } 53 }
reference:http://www.cnblogs.com/springfor/p/3888003.html
标签:
原文地址:http://www.cnblogs.com/hygeia/p/4632486.html