IncredibleThings

导航

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编辑  收藏  举报