http://oj.leetcode.com/problems/rotate-image/
把一个n * n的矩阵顺时针旋转90度,题目中要求用 In-place 原地算法
维基上对原地算法的定义如下:在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部份覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)。
一个简单的In-place算法例子是让 数组 A[n] 到序, 则 in-place算法如下:
#对数组A[n] 倒序
for i in [0,n/2]:
swap(A[i], A[n-1-i])
AC的思路是:先按对角线反转,然后左右翻转
class Solution {
public:
void rotate(vector
> &matrix) {
int n = matrix.size();
for(int i = 0; i < n; i++)
for(int j = 0; j <= i; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n/2; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[i][n-j-1];
matrix[i][n-j-1] = tmp;
}
}
}
};