输出顺时针旋转的数组

 

题目描述:给出一个正整数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;
	}

  

posted @ 2016-01-09 11:40  江湖小妞  阅读(1087)  评论(0编辑  收藏  举报