算法 偷鸡法rand()
还是官方解比较好,我这个就图一乐~
既然直接修改为0,会导致原来的0和修改后的0分不清,那么我们可以用一个别的数来标记被修改的0,
这个数必须是在int范围里,且没在矩阵中出现过的,最后把他们修改成0就好
记得离散数学里好像有讲过怎么整出这样的数的,但我忘了
既然只有4w个数,不如直接rand()一个整数,概率还是挺大的
时间复杂度 $O(n^3)$
空间复杂度 $O(1)$
参考文献
C++ 代码
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int mn = rand();
int m = matrix.size();
int n = matrix[0].size();
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(matrix[i][j]==0)
{
matrix[i][j] = mn;
for(int u=0;u<m;u++)
if(matrix[u][j]!=0)
matrix[u][j] = mn;
for(int u=0;u<n;u++)
if(matrix[i][u]!=0)
matrix[i][u] = mn;
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(matrix[i][j]==mn)
matrix[i][j] = 0;
}
}
}
};