首页 > 其他 > 详细

[LeetCode]73 Set Matrix Zeroes

时间:2015-01-04 19:37:33      阅读:267      评论:0      收藏:0      [点我收藏+]

https://oj.leetcode.com/problems/set-matrix-zeroes/

http://blog.csdn.net/linhuanmars/article/details/24066199

public class Solution {
    public void setZeroes(int[][] matrix)
    {
        // Solution A:
        // setZeroes_NoExtraSpace(matrix);
        
        // Solution B:
        setZeroes_ExtraRowAndCol(matrix);
    }
    
    ////////////////////////
    // Solution A: NoExtraSpace
    //
    // 使用第一行和第一列来记录
    private void setZeroes_NoExtraSpace(int[][] matrix)
    {
        if (matrix == null)
            return;
        
        // Assume it is m * n;
        
        int m = matrix.length;
        int n = matrix[0].length;
        
        // Handle first row
        boolean firstRow0 = false;
        for (int i = 0 ; i < n ; i ++)
        {
            if (matrix[0][i] == 0)
            {
                firstRow0 = true;
            }
        }
        
        // First col
        boolean firstCol0 = false;
        for (int i = 0 ; i < n ; i ++)
        {
            if (matrix[0][i] == 0)
            {
                firstCol0 = true;
            }
        }
        
        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 = 0 ; i < m ; i ++)
        {
            for (int j = 0 ; j < n ; j ++)
            {
                if (i == 0 && firstCol0)
                {
                    matrix[i][j] = 0;
                }
                else if (j == 0 && firstRow0)
                {
                    matrix[i][j] = 0;
                }
                else if (i > 0 && j > 0 && (matrix[0][j] == 0 || matrix[i][0] == 0))
                {
                    matrix[i][j] = 0;
                }
            }
        }
    }
    
    
    ////////////////////////
    // Solution B: ExtraRowAndCol
    //
    private void setZeroes_ExtraRowAndCol(int[][] matrix)
    {
        if (matrix == null)
            return;
        
        // Assume it is m * n;
        
        int m = matrix.length;
        int n = matrix[0].length;
        
        boolean[] cols = new boolean[m];
        boolean[] rows = new boolean[n];
        
        for (int i = 0 ; i < m ; i ++)
        {
            for (int j = 0 ; j < n ; j ++)
            {
                if (matrix[i][j] == 0)
                {
                    cols[i] = true;
                    rows[j] = true;
                }
            }
        }
        
        for (int i = 0 ; i < m ; i ++)
        {
            for (int j = 0 ; j < n ; j ++)
            {
                if (cols[i] || rows[j])
                    matrix[i][j] = 0;
            }
        }
    }
}


[LeetCode]73 Set Matrix Zeroes

原文:http://7371901.blog.51cto.com/7361901/1598955

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!