赞
踩
题目:
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
C++:
思路:
可以使用两个数组来记录哪些行和列需要被置零。
首先,我们遍历整个矩阵,如果一个元素为0,我们就将其所在的行和列分别标记为需要被置零的行和列。
然后,我们再次遍历整个矩阵,如果一个元素所在的行或列被标记为需要被置零的行或列,我们就将该元素置零。
//数量的行(的std::vector<int>包含在vec数):vec.size()
//列数(包含在每个元素的数量std::vector<int>):vec[0].size()
//元素总数:vec.size()*vec[0].size()
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution
{
public:
void Setzero(vector<vector<int>>& matrix)
{
int m = matrix.size();
int n = matrix[0].size();
if (n == 0 && m == 0)
return;
vector<int> rows(m, 0); // 创建一个大小为m的vector,并将每个元素初始化为0。
vector<int> cols(n, 0); // 创建一个大小为n的vector,并将每个元素初始化为0。
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (matrix[i][j] == 0)
{
rows[i] = 1;
cols[j] = 1;
}
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (rows[i] == 1 || cols[j] == 1)
{
matrix[i][j] = 0;
}
cout << matrix[i][j] << endl;
}
}
}
};
int main()
{
vector<vector<int>> matrix = { { 1, 1, 1 }, { 1, 0, 1 }, { 1, 1, 1 } };
Solution S;
S.Setzero(matrix);
}
python:
思路:两遍扫matrix,第一遍用集合记录哪些行,哪些列有0;第二遍置0
class Solution:
def setZeroes(self, matrix):
"""
Do not return anything, modify matrix in-place instead.
"""
row = len(matrix)
col = len(matrix[0])
# set():创建空集合
row_zero = set()
col_zero = set()
for i in range(row):
for j in range(col):
if matrix[i][j] == 0:
row_zero.add(i)
col_zero.add(j)
for i in range(row):
for j in range(col):
if i in row_zero or j in col_zero:
matrix[i][j] = 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。