如果你没有写过线代或者对线代不是很熟悉的话,那就你可以学学我,先把图画出来
分别对象i , j 下标值 开始图
0,0 | 0,1 | 0,2 | 0,3 |
1,0 | 1,1 | 1,2 | 1,3 |
2,0 | 2,1 | 2,2 | 2,3 |
3,0 | 3,1 | 3,2 | 3,3 |
经过旋转之后
3,0 | 2,0 | 1,0 | 0,0 |
3,1 | 2,1 | 1,1 | 0,1 |
3,2 | 2,2 | 1,2 | 0,2 |
3,3 | 2,3 | 1,3 | 0,3 |
看到没有 你发现了奇迹吧。
i值 ,从后往前依次增加
j值,从上往下依次增加 。
如果这个提示直接输出 , 那就好办了 ,但是这个题他不是这样的,需要在原数组上进行变换。
大概思路是这样的: 外层循环是沿着对角线的 循环次数len/2 里面还有一层循环,每一个外层需要循环的次数,有多少组需要旋转的数据。 我这样说可能难以明白 ,那就看代码吧。
/**
*
*/
package day05;
/**
* @author JZWen
*
*/
public class Demo {
public static void fun(int[][] matrix) {
int num = matrix.length;
System.out.println(num);
//int num = len/2; //需要遍历的次数
//每次循环下次 i,j = i;
for(int i=0; i<num/2; i++) { //对角线上的数据
for(int j = i; j < num-i-1; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[num-j-1][i];
matrix[num-j-1][i] = matrix[num-i-1][num-j-1];
matrix[num-i-1][num-j-1] = matrix[j][num-i-1];
matrix[j][num-i-1] = temp;
}
//System.out.println(11111);
}
for(int i=0; i<num; i++) {
for(int j=0; j<num; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
public static void main(String []args) {
int [][] num = {
{ 5, 1, 9,11},
{ 2, 4, 8,10},
{13, 3, 6, 7},
{15,14,12,16}
};
fun(num);
}
}