您的位置:首页 > 编程语言 > C#

LeetCode Online Judge 题目C# 练习 - Set Matrix Zeroes

2012-10-17 00:57 330 查看
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

public static void SetMatrixZeros(List<List<int>> matrix)
{
bool col0 = false;
for (int i = 0; i < matrix.Count; i++)
{
for (int j = 0; j < matrix[i].Count; j++)
{
if (matrix[i][j] == 0)
{
if (j == 0)
col0 = true;
else
{
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
}

for (int j = 1; j < matrix[0].Count; j++)
{
if (matrix[0][j] == 0)
{
for (int i = 1; i < matrix.Count; i++)
{
matrix[i][j] = 0;
}
}
}

for (int i = 0; i < matrix.Count; i++)
{
if (matrix[i][0] == 0)
{
for (int j = 1; j < matrix[i].Count; j++)
{
matrix[i][j] = 0;
}
}
}

if (col0)
{
for (int i = 0; i < matrix.Count; i++)
{
matrix[i][0] = 0;
}
}
}


代码分析:

  上面代码的Space(1)的做法,最好的的做法。

  Space(m * n),最简单的做法是是, 建一个一样m * n 的矩阵,标记需要改为0的坐标。然后在loop一遍矩阵,在原矩阵改0

  Space (m + n), 稍好一点的做法, 建两个数组,row[], col[], 标记需要改为0的 行 和 列。然后在loop一遍两数组,在原矩阵改0

  Space (1),就是代码中的做法,在loop原矩阵的时候,把该 行 和 列的第一个元素标0, 在loop一遍行,一边列,改0。有个问题是,loop列的时候要去掉第一列,不然下面loop行的时候就会全变 0 了,所以用一个flag,标记第一列需要改0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: