此题让把一个二维数组顺时针旋转90度
首先把left-->right, 然后bottom-->top, 然后right-->left, 最后top-->bottom
在循环中,i是++的,offset=i-first也是++的,last-offset是--的,所以遇见++的选i,遇见--的选last-offset
left-->right: (不变,变++)-->(first,i)
bottom-->top:(变--,不变)-->(last-offset, first)
right-->left:(不变,变--)-->(last, last-offset)
top-->bottom:(变++,不变) (i, last)
public void rotate(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
return;
int n = matrix.length;
for (int layer = 0; layer < n / 2; layer++) {
int first = layer;
int last = n - 1 - first;
for (int i = first; i < last; i++) {
int offset = i - first;
int temp = matrix[first][i];
matrix[first][i] = matrix[last - offset][first];
matrix[last - offset][first] = matrix[last][last - offset];
matrix[last][last - offset] = matrix[i][last];
matrix[i][last] = temp;
}
}
}