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