public void setZeroes(int[][] matrix) { if(matrix==null || matrix.length==0 || matrix[0].length==0) return; boolean rowFlag = false; boolean colFlag = false; for(int i=0;i<matrix.length;i++) { if(matrix[i][0]==0) { colFlag = true; break; } } for(int i=0;i<matrix[0].length;i++) { if(matrix[0][i]==0) { rowFlag = true; break; } } for(int i=1;i<matrix.length;i++) { for(int j=1;j<matrix[0].length;j++) { if(matrix[i][j]==0) { matrix[i][0] = 0; matrix[0][j] = 0; } } } for(int i=1;i<matrix.length;i++) { for(int j=1;j<matrix[0].length;j++) { if(matrix[i][0]==0 || matrix[0][j]==0) matrix[i][j] = 0; } } if(colFlag) { for(int i=0;i<matrix.length;i++) { matrix[i][0] = 0; } } if(rowFlag) { for(int i=0;i<matrix[0].length;i++) { matrix[0][i] = 0; } } }这道题也是cc150里面比較经典的题目,看似比較简单,却能够重重优化,终于达到常量空间。事实上面试中面试官看重的是对于算法时间空间复杂度的理解,对优化的概念,这些经常比题目本身的难度更加重要,寻常做题还是要对这些算法分析多考虑哈。
原文:http://www.cnblogs.com/mengfanrong/p/4295789.html