LeetCode73——Set Matrix Zeroes
这个题目不是很难,最开始想先写一个函数用来完成“十字归零”
然后二次循环在矩阵中遇到0就直接调用。
上述思路肯定不可行,原因是:每次归零又会产生新的零,这样操作起来就无穷无尽了。
解决思路:
先用一个Vector 保存原始矩阵中所有零点的坐标,这样我们获得一个点集。
对这个点集里面标定的位置进行”十字归零“操作。
代码:
class Solution {
private:
void setRowAndCol(vector<int>point,vector<vector<int>> &matrix)
{
//行
for (int j = 0; j < matrix[0].size(); j++)
{
matrix[point[0]][j] = 0;
}
//列
for (int i = 0; i < matrix.size(); i++)
{
matrix[i][point[1]] = 0;
}
}
public:
void setZeroes(vector<vector<int>>& matrix) {
vector<vector<int>>points;
vector<int>point(2);
for (int i = 0; i < matrix.size(); i++)
{
for (int j = 0; j < matrix[0].size(); j++)
{
if (matrix[i][j] == 0)
{
point[0] = i;
point[1] = j;
points.push_back(point);
}
}
}
for (int i = 0; i < points.size(); i++)
{
setRowAndCol(points[i], matrix);
}
}
};