161. 旋转图像
给定一个N×N的二维矩阵表示图像,90度顺时针旋转图像。
样例
给出一个矩形[[1,2],[3,4]],90度顺时针旋转后,返回[[3,1],[4,2]]
挑战
能否在原地完成?
思路
比较简单 直接上代码
class Solution {
public:
/**
* @param matrix: a lists of integers
* @return: nothing
*/
void rotate(vector<vector<int>> &matrix) {
int n = matrix.size()-1;
/* 3,0 -> 0,0
1234 (4,1)->(1,1); (1,1)->(1,4); (1,4)->(4,4); (4,4)->(4,1)
5678 (3,1)->(1,2);
4321 (3,2)->(2,2);
8765 (i,j)->(j, n+1-i)->(n+1-i, n+1-j)->(n+1-j, i)->(i,j)
*/
/*
8451
7672
6323
5184
*/
cout << (n+1)/2 << endl;
for(int i=0; i<((n+1)/2); ++i)
{
for(int j=i; j<n-i; ++j)
{
int tmp = matrix[i][j];
matrix[i][j] = matrix[n-j][i];
matrix[n-j][i] = matrix[n-i][n-j];
matrix[n-i][n-j] = matrix[j][n-i];
matrix[j][n-i] = tmp;
}
}
}
};