零矩阵
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
相关标签 数组 哈希表 矩阵
我的答案:
#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
#include<algorithm> sort 排序函数
#include <set> set 去重函数
using namespace std;
void printMatrix(int matrix[][4])
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
void printMatrix(vector<vector<int>>& vecTest)
{
auto iter = vecTest.begin();
for (; iter != vecTest.end(); ++iter)
{
for (int i = 0; i< (*iter).size(); ++i)
{
cout << (*iter)[i] << " ";
}
cout << endl;
}
cout << endl;
}
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
cout << "--------------- 1" << endl;
vector<int> cow_x;
vector<int> column_y;
for (auto row = 0; row < matrix.size(); row++)
{
for (auto column = 0; column < matrix[0].size(); column++)
{
if (matrix[row][column] == 0)
{
cout << row << column << endl;
cow_x.push_back(row);
column_y.push_back(column);
}
}
}
cout << "--------------- 2"<< endl;
//去重
set<int>temp_x(cow_x.begin(), cow_x.end());
set<int>temp_y(column_y.begin(), column_y.end());
cow_x.assign(temp_x.begin(), temp_x.end());
column_y.assign(temp_y.begin(), temp_y.end());
cout << cow_x.size() << endl;
cout << column_y.size() << endl;
cout << "--------------- 3" << endl;
for (auto i = 0; i < cow_x.size(); i++)
{
for (auto row = 0; row < matrix.size(); row++)
{
if (row == cow_x[i])
{
cout << i << cow_x[i] << row<< endl;
for (auto column = 0; column < matrix[0].size(); column++)
{
matrix[row][column] = 0;
}
}
}
}
cout << "--------------- 4" << endl;
for (auto j = 0; j < column_y.size(); j++)
{
cout << j << endl;
for (auto column = 0; column < matrix[0].size(); column++)
{
if (column == column_y[j])
{
cout << j << column_y[j] << column << endl;
for (auto row = 0; row < matrix.size(); row++)
{
matrix[row][column] = 0;
}
}
}
}
}
};
int main(int argc, char *argv[])
{
vector<int> vec1;
vec1.push_back(0);
vec1.push_back(1);
vec1.push_back(2);
vec1.push_back(0);
vector<int> vec2;
vec2.push_back(3);
vec2.push_back(4);
vec2.push_back(5);
vec2.push_back(2);
vector<int> vec3;
vec3.push_back(1);
vec3.push_back(3);
vec3.push_back(1);
vec3.push_back(5);
vector<vector<int>> matrix_vector;
matrix_vector.push_back(vec1);
matrix_vector.push_back(vec2);
matrix_vector.push_back(vec3);
Solution solution;
printMatrix(matrix_vector);
solution.setZeroes(matrix_vector);
printMatrix(matrix_vector);
system("pause");
return EXIT_SUCCESS;
}
LeetCode官方答案:
https://leetcode-cn.com/problems/zero-matrix-lcci/solution/ling-ju-zhen-by-leetcode-solution-7ogg/