可以写个代码,7、矩阵置零 给定一个 m * n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
时间: 2023-06-05 09:08:16 浏览: 132
好的,下面是 C++ 的代码实现:
```cpp
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
bool row0_has_zero = false;
bool col0_has_zero = false;
// 判断第一行是否有 0
for (int j = 0; j < n; j++) {
if (matrix[0][j] == 0) {
row0_has_zero = true;
break;
}
}
// 判断第一列是否有 0
for (int i = 0; i < m; i++) {
if (matrix[i][0] == 0) {
col0_has_zero = true;
break;
}
}
// 遍历矩阵,将 0 所在的行和列的第一个元素置为 0
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
// 遍历矩阵,将 0 所在的行和列都置为 0
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
matrix[i][j] = 0;
}
}
}
// 处理第一行和第一列,如果需要置零,则整行整列都置零
if (row0_has_zero) {
for (int j = 0; j < n; j++) {
matrix[0][j] = 0;
}
}
if (col0_has_zero) {
for (int i = 0; i < m; i++) {
matrix[i][0] = 0;
}
}
}
};
```
这个算法的时间复杂度是 O(mn),空间复杂度是 O(1)。
如果你有更多问题或者需要我帮你处理其它问题,请随时告诉我。
阅读全文