给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
注意:本题与主站 48题 相同:https://leetcode-cn.com/problems/rotate-image/
来源:力扣(LeetCode)
题目链接:https://leetcode-cn.com/problems/rotate-matrix-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题方法一:使用额外空间
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
vector<vector<int>> ans;
int n = matrix.size();
for(int i = 0; i < n; ++i){
vector<int> row;
for(int j = 0; j < n; ++j){
row.push_back(matrix[j][i]);
}
reverse(row.begin(), row.end());
ans.push_back(row);
}
matrix.clear();
matrix = ans;
}
};
解题方法二:矩阵水平翻转再对角线翻转
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 - 1 - i][j]);
}
}
for(int i = 0; i < n; ++i){
for(int j = i; j < n; ++j){
swap(matrix[i][j], matrix[j][i]);
}
}
}
}
解题方法三:原地旋转
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 + 1) / 2; ++j){
swap(matrix[i][j], matrix[n - j - 1][i]);
swap(matrix[n - j - 1][i], matrix[n - i - 1][n - j - 1]);
swap(matrix[n - i - 1][n - j - 1], matrix[j][n - i - 1]);
}
}
}
};