求和为给定值的组合
问题
这个题目说的是,给你一个 n x n 的二维数组,你要沿顺时针方向将它旋转 90 度。要求你不能使用额外的存储空间,就地在原数组操作。
比如说,给你的二维数组是:
1, 2, 3
4, 5, 6
7, 8, 9
顺时针旋转 90 度后,得到的二维数组是:
7, 4, 1
8, 5, 2
9, 6, 3
代码
public class AlgoCasts {
// Time: O(n^2), Space: O(1)
public void rotate(int[][] matrix) {
if (matrix == null || matrix.length == 0 ||
matrix[0] == null || matrix[0].length == 0)
return;
int n = matrix.length;
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++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-1-j];
matrix[i][n-1-j] = tmp;
}
}
}
}