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.
思路:
如果允许额外存储行和列清零的信息,那么题目就没有意思了。希望只用O(1)的存储空间的时候,我们就得利用矩阵本身的存储空间了:把清零的信息保存在第一行和第一列里。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<vector<int>> m = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int row = m.size();
int col = m[0].size();
bool frow = false;
bool fcol = false;
for (int i = 0; i < col; i++)
{
if (m[0][i] == 0)
frow = true;
}
for (int i = 0; i < row; i++)
{
if (m[i][0] == 0)
fcol = true;
}
//对于矩阵中的其他元素,标志所在的行和列进行标注为0 这是在第一行的元素上进行的
for (int i = 1; i < row; i++)
{
for (int j = 1; j < col; j++)
{
if (m[i][j] == 0)
{
m[i][0] = 0;
m[0][j] = 0;
}
}
}
//现在对第一行中标注为0的行进行全部为0
/*for (int i = 1; i < row; i++)
{
if (m[i][0]==0)
for (int j = 1; j < col; j++)
m[i][j] == 0;
}
for (int i = 1; i < col; i++)
{
if (m[0][i] == 0)
for (int j = 1; j < row; j++)
m[j][i] == 0;
}*/
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (m[i][0] == 0 || m[0][j] == 0)
m[i][j] == 0;
}
}
//判断第一行元素
if (frow==true)
for (int i = 0; i < col; i++)
m[0][i] == 0;
if (fcol == true)
{
for (int i = 0; i < row; i++)
m[i][0] == true;
}
}