class Solution {
public:
/* void setZeroes(vector<vector<int>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
vector<bool> row(m, false), col(n, false);
for(int i=0;i<m;i++) {
for(int j=0; j<n; j++) {
if(0== matrix[i][j]) {
row[i]=col[j]=true;
}
}
}
for(int i=0;i<m;i++) {
for(int j=0; j<n; j++) {
if(row[i] || col[j] ) {
matrix[i][j]=0;
}
}
}
}*/
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
bool flagRow0 = false;
bool flagCol0 = false;
for (int i = 0; i < m; i++) {
if (0 == matrix[i][0]) {
flagCol0 = true;
}
}
for (int j = 0; j < n; j++) {
if (0 == matrix[0][j]) {
flagRow0 = true;
}
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (0 == matrix[i][j]) {
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (!matrix[i][0] || !matrix[0][j]) {
matrix[i][j] = 0;
}
}
}
if (flagRow0) {
for (int j = 0; j < n; j++) {
matrix[0][j] = 0;
}
}
if (flagCol0) {
for (int i= 0; i < m; i++) {
matrix[i][0] = 0;
}
}
}
};
矩阵旋转:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
// 水平翻转
for (int i = 0; i < n / 2; ++i) {
for (int j = 0; j < n; ++j) {
swap(matrix[i][j], matrix[n - i - 1][j]);
}
}
// 主对角线翻转
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
}
};
void rotate(int** matrix, int matrixSize, int* matrixColSize){
int revertedMatrix[matrixSize][* matrixColSize];
for(int i=0; i<matrixSize; i++) {
for(int j=0; j<* matrixColSize; j++) {
revertedMatrix[j][matrixSize-i-1]=matrix[i][j];
}
}
for(int i=0; i<matrixSize; i++) {
for(int j=0; j<* matrixColSize; j++) {
matrix[i][j]=revertedMatrix[i][j];
printf(" %d ", matrix[i][j] );
}
printf("\n");
}
}