题目链接:set-matrix-zeroes
import java.util.Arrays; /** * Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 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? * */ public class SetMatrixZeroes { //解法一 // 157 / 157 test cases passed. // Status: Accepted // Runtime: 273 ms // Submitted: 0 minutes ago //时间复杂度O(mn) 空间复杂度O(1) //复用第0行和第0列,用来标记某列和某行是否该置0 public void setZeroes(int[][] matrix) { int m = matrix.length; int n =matrix[0].length; boolean row0 = false; //先标记第0行是否包含0 boolean col0 = false; //先标记第0列是否包含0 for(int i = 0; i < m; i++) { if(matrix[i][0] == 0) { col0 = true; break; } } for(int i = 0; i < n; i++) { if(matrix[0][i] == 0) { row0 = true; break; } } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if(matrix[i][j] == 0) { matrix[0][j] = 0; matrix[i][0] = 0; } } } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if(matrix[0][j] == 0 || matrix[i][0] == 0 ) { matrix[i][j] = 0; } } } if(col0) { for(int i = 0; i < m; i++) { matrix[i][0] = 0; } } if(row0) { for(int i = 0; i < n; i++) { matrix[0][i] = 0; } } } //第二种解法 // 157 / 157 test cases passed. // Status: Accepted // Runtime: 365 ms // Submitted: 0 minutes ago //时间复杂度O(mn) 空间复杂度O(m+n) public void setZeroes1(int[][] matrix) { int m = matrix.length; int n =matrix[0].length; boolean[] row = new boolean[m]; boolean[] col = new boolean[n]; Arrays.fill(row, false); Arrays.fill(col, false); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if(matrix[i][j] == 0) { row[i] = true; col[j] = true; } } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if(row[i] || col[j] ) { matrix[i][j] = 0; } } } } public static void main(String[] args) { // TODO Auto-generated method stub } }
[LeetCode 73] Set Matrix Zeroes
原文:http://blog.csdn.net/ever223/article/details/44603075