题目
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
解法一
其实所谓的旋转图像,说到底不就是数组中元素有规律的交换吗?那么这种正方形数组的旋转规律在哪里呢?其实我们可以将其想成一圈套一圈的数组,每圈中的数都是向前移动边长位来进行交换的。那么对于每一圈数组,我们就能设立四个指针变量,分别指向上下左右的起始元素,然后通过指针之间的元素交换与指针的前移来实现一圈圈的旋转。所以我们需要两重for循环,一重指圈数,另一重表示指针的移动。
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int u,l,d,r; //分别表示上左下右四个指针,指针的添加有助于移动的理解
int temp; //做交换的变量
//i表示从外往里数第几圈,j表示下一个移动的位置
for(int i = 0;i < n/2;i++){
for(int j = i;j < n - i -1;j++){
//i在这里表示每圈固定的行或列,是不变的
u = r = j;
d = l = n-j-1;
temp = matrix[i][u];
matrix[i