【数组】旋转数组
题目描述:
给你一幅由
N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?
示例:
输入: [[1,2,3],[4,5,6],[7,8,9]]
输出: [[7,4,1],[8,5,2],[9,6,3]]
#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
// 利用辅助数组
void rotate(vector<vector<int>>& matrix) {
int len = matrix.size();
vector<vector<int>> res(len, vector<int>(len));
for(int i=0; i<len; i++){
for(int j=0; j<len; j++){
// C++ 这里的 = 拷贝是值拷贝,会得到一个新的数组
res[i][j] = matrix[len-j-1][i];
}
}
matrix = res;
}
};
int main()
{
vector<vector<int>> arr = { {5, 1, 9,11},{2, 4, 8,10},{13, 3, 6, 7},{15,14,12,16} };
Solution solution;
solution.rotate(arr);
int len = arr.size();
for(int i=0; i<len; i++){
for(int j=0; j<len; j++){
cout << arr[i][j] << ' ';
}
}
return 0;
}
AC
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++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[n - 1 - j][i];
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
matrix[j][n - 1 - i] = tmp;
}
}
}
};