思路其实很简单
- 先翻折
- 再将每一列反转(双指针)
#include <bits/stdc++.h>
using namespace std;
/*
顺时针旋转90°
*/
vector<vector<int>> rotate90(vector<vector<int>> matrix) {
int r = matrix[0].size();
int c = matrix.size();
vector<vector<int>> ans(r, vector<int>(c));
for (int i = 0; i < c; i ++) {
for (int j = 0; j < r; j ++) {
ans[j][i] = matrix[i][j];
}
}
for (int i = 0; i < r; i ++) {
int left = 0, right = c - 1;
while (left < right) {
int tmp = ans[i][left];
ans[i][left] = ans[i][right];
ans[i][right] = tmp;
left ++;
right --;
}
}
return ans;
}
/*
逆时针旋转90°
*/
vector<vector<int>> rotate90i(vector<vector<int>> matrix) {
int r = matrix[0].size();
int c = matrix.size();
vector<vector<int>> ans(r, vector<int>(c));
for (int i = 0; i < c; i ++) {
for (int j = 0; j < r; j ++) {
ans[j][i] = matrix[i][j];
}
}
for (int i = 0; i < c; i ++) {
int left = 0, right = r - 1;
while (left < right) {
int tmp = ans[left][i];
ans[left][i] = ans[right][i];
ans[right][i] = tmp;
left ++;
right --;
}
}
return ans;
}
int main() {
vector<vector<int>> nums = {
{1, 2, 3},
{4, 5, 6},
};
auto res = rotate90i(nums);
for (int i = 0; i < res.size(); i ++) {
for (int j = 0; j < res[i].size(); j ++) {
cout << res[i][j] << " ";
}
cout << endl;
}
return 0;
}