旋转图像问题。
在计算机中图片都是以二进制数组存储的,所以旋转图像问题就对应于数组变换的问题。
输入:一个二维数组
输出:clockwise 旋转90°后的二维数组

用例
分析
还是类似于找规律的问题。可以发现 m[i][j] = m[n-1-j][i]
思路
每一轮做一个类似闭环的4个元素交换

元素交换示意图
唯一要注意的就是循环结束条件。
代码
package day_11;
import java.util.Arrays;
// 数组顺时针旋转 90°的问题。
// 观察到一个规律就是说 m[i][j] = m[n-1-j][i]
// 由于不能allocate 一个新的二维数组。 下面就要做一个闭环的交换
public class RotateImage {
public void rotate(int[][] matrix){
int n = matrix.length;
for (int i=0;i<n/2;i++){
for(int j=0;j<(n+1)/2;j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[n-1-j][i];
matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
matrix[j][n-1-i] = temp;
}
}
}
public static void main(String args[]){
int a[][] = {{5,1,9,11},{2,4,8,10},{13,3,6,7},{15,14,12,16}};
RotateImage r = new RotateImage();
r.rotate(a);
for(int i=0;i<a.length;i++){
System.out.print(Arrays.toString(a[i]));
}
}
}