题目描述:给出一个正整数N,按照如下序列输出一个N*N的数组。
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
分析:与前面做的一个题目有些类似。先找出数组更新的规律,每次分为右、下左、上四个方向。一共需要旋转N/2圈,如果N是奇数的话,则会存在一个中间位置的元素,另外复制即可。代码如下:
int[][] getClockwiseMatrix(int n) {
int[][] res = new int[n][n];
int m = 1;
for(int i=0; i<n/2; i++) {
//right
for(int j=i; j<n-i; j++) {
if(0 == res[i][j])
res[i][j] = m++;
}
//down
for(int j=i+1; j<n-i; j++) {
if(0 == res[j][n-i-1])
res[j][n-i-1] = m++;
}
//left
for(int j=n-i-1; j>i; j--) {
if(0 == res[n-i-1][j])
res[n-i-1][j] = m++;
}
//up
for(int j=n-i-1; j>i; j--) {
if(0 == res[j][i])
res[j][i] = m++;
}
}
if(1 == n % 2)
res[n/2][n/2] = m;
return res;
}
原文:http://www.cnblogs.com/little-YTMM/p/5115777.html