アルゴリズム(3)マトリクス回転問題
マトリックス反転問題マトリックス回転問題 1. 反時計回りに90度 回転 2. 時計回りに90度 回転 3. 180度回転
マトリックスかいてんもんだい
あるいは画像の回転の問題です.
1.反時計回りに90度回転
反時計回りに90度回転すると、左上から右下の対角線に沿って反転し、上下に反転することができます.マトリックス
まず対角線を反転して
さらに上下に反転して
元のマトリクスが反時計回りに90度回転した結果にぴったりです.
2.時計回りに90度回転
時計回りに90度回転すると、右上から左下の対角線に沿って反転し、上下に反転することができます.マトリックス
まず対角線を反転して
さらに上下に反転して
元のマトリクスが時計回りに90度回転した結果にぴったりです.
48.回転画像実現:
3.180度回転
180度回転は1回の上下反転、1回の左右反転で実現され、2回の反転順序は限定されない.マトリックス
まず上下を反転して
さらに左右に反転して
元のマトリクスが180度回転した結果にぴったりです.
マトリックスかいてんもんだい
あるいは画像の回転の問題です.
1.反時計回りに90度回転
反時計回りに90度回転すると、左上から右下の対角線に沿って反転し、上下に反転することができます.マトリックス
1 2 3
4 5 6
7 8 9
まず対角線を反転して
1 4 7
2 5 8
3 6 9
さらに上下に反転して
3 6 9
2 5 8
1 4 7
元のマトリクスが反時計回りに90度回転した結果にぴったりです.
2.時計回りに90度回転
時計回りに90度回転すると、右上から左下の対角線に沿って反転し、上下に反転することができます.マトリックス
1 2 3
4 5 6
7 8 9
まず対角線を反転して
9 6 3
8 5 2
7 4 1
さらに上下に反転して
7 4 1
8 5 2
9 6 3
元のマトリクスが時計回りに90度回転した結果にぴったりです.
48.回転画像実現:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
if(n <= 1){
return;
}
for(int i = 0; i < n-1; i++){
for(int j = 0; j < n-1-i; j++){
int t = matrix[i][j];
matrix[i][j] = matrix[n-1-j][n-1-i];
matrix[n-1-j][n-1-i] = t;
}
}
for(int i = 0; i < n / 2; i++){
for(int j = 0; j < n; j++){
int t = matrix[i][j];
matrix[i][j] = matrix[n-1-i][j];
matrix[n-1-i][j] = t;
}
}
}
3.180度回転
180度回転は1回の上下反転、1回の左右反転で実現され、2回の反転順序は限定されない.マトリックス
1 2 3
4 5 6
7 8 9
まず上下を反転して
7 8 9
4 5 6
1 2 3
さらに左右に反転して
9 8 7
6 5 4
3 2 1
元のマトリクスが180度回転した結果にぴったりです.