LeetCode-Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
public class Solution { public void setZeroes(int[][] matrix) { if(matrix==null){ return; } int m=matrix.length; int n=matrix[0].length; List<Integer> r=new ArrayList<Integer>(); List<Integer> c=new ArrayList<Integer>(); for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ if(matrix[i][j]==0){ r.add(i); c.add(j); } } } for(int i=0; i<r.size(); i++){ int row=r.get(i); int column=c.get(i); for(int k=0; k<n; k++){ matrix[row][k]=0; } for(int l=0; l<m; l++){ matrix[l][column]=0; } } } }
二刷:
题目说明不能用额外空间,为了减少重复计算, 我们只是把等于零的相对应的头row和头column标为零。
注意第一排和列共用一个matrix[0][0], 应该分开讨论:
class Solution { public void setZeroes(int[][] matrix) { if(matrix == null || matrix.length == 0 || matrix[0].length == 0){ return; } int row = matrix.length; int column = matrix[0].length; //Check first column boolean isFirstCol = false; for(int i = 0; i < row; i++){ if (matrix[i][0] == 0){ isFirstCol = true; } for(int j = 1; j < column; j++){ if(matrix[i][j] == 0){ matrix[i][0] = 0; matrix[0][j] = 0; } } } for(int i = 1; i< row; i++){ for(int j = 1; j < column; j++){ if(matrix[i][0] == 0 || matrix[0][j] == 0){ matrix[i][j] = 0; } } } //check first row if(matrix[0][0] == 0){ for(int j = 0; j< column; j++){ matrix[0][j] = 0; } } //check first column if(isFirstCol){ for(int i =0; i<row; i++){ matrix[i][0] = 0; } } } }
posted on 2016-09-28 08:07 IncredibleThings 阅读(125) 评论(0) 编辑 收藏 举报