Skip to content

Commit 1649a6b

Browse files
committed
java实现环形螺旋打印
1 parent 7dd40b3 commit 1649a6b

File tree

2 files changed

+163
-0
lines changed

2 files changed

+163
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.chen.algorithm.rectangle;
2+
3+
/**
4+
* User: chenweijie
5+
* Date: 11/6/17
6+
* Time: 9:52 PM
7+
* Description: http://blog.csdn.net/terry84fun/article/details/4807521
8+
*/
9+
public class RingDemo {
10+
/**
11+
* @param n
12+
* 打印螺旋举矩阵
13+
*/
14+
public static void setArray(int n) {
15+
int intA = 1;//初始化
16+
int[][] array = new int[n][n];
17+
int intB;
18+
if (n % 2 != 0) {
19+
intB = n / 2 + 1;//奇数时i循环次数
20+
} else
21+
intB = n / 2;//偶数时i循环次数
22+
for (int i = 0; i < intB; i++) {//从外到里循环
23+
//从左到右横的开始
24+
for (int j = i; j < n - i; j++) {
25+
array[i][j] = intA;
26+
intA++;
27+
}
28+
//从上到下纵
29+
for (int k = i + 1; k < n - i; k++) {
30+
array[k][n - i - 1] = intA;
31+
intA++;
32+
}
33+
//从右到左横
34+
for (int l = n - i - 2; l >= i; l--) {
35+
array[n - i - 1][l] = intA;
36+
intA++;
37+
}
38+
//从下到上纵
39+
for (int m = n - i - 2; m > i; m--) {
40+
array[m][i] = intA;
41+
intA++;
42+
}
43+
}
44+
//输出数组
45+
for (int i = 0; i < n; i++) {
46+
for (int j = 0; j < n; j++) {
47+
System.out.print(array[i][j] + " ");
48+
}
49+
System.out.println();
50+
}
51+
}
52+
public static void setArray(int n,int m) {
53+
int intA=1;
54+
int array[][] = new int[n][m];
55+
int intB;
56+
if (n % 2 != 0) {
57+
intB = n / 2 + 1;//奇数时i循环次数
58+
} else
59+
intB = n / 2;//偶数时i循环次数
60+
for(int i = 0;i < intB; i++){//从外到里循环
61+
//从左到右横的开始
62+
for(int j = i; j<m-i; j++)
63+
{
64+
array[i][j]=intA;
65+
intA++;
66+
}
67+
//从上到下
68+
for(int k=i+1;k<n-i;k++)
69+
{
70+
array[k][m-i-1]=intA;
71+
intA++;
72+
}
73+
//从右到左
74+
for(int l=m-i-2; l>=i;l--)
75+
{
76+
array[n-i-1][l]=intA;
77+
intA++;
78+
}
79+
//从下到上
80+
for(int o=n-i-2;o>i;o--)
81+
{
82+
array[o][i]=intA;
83+
intA++;
84+
}
85+
}
86+
//输出数组
87+
for (int i = 0; i < n; i++) {
88+
for (int j = 0; j < n; j++) {
89+
System.out.print(array[i][j] + " ");
90+
}
91+
System.out.println();
92+
}
93+
}
94+
public static void main(String[] args) {
95+
// TODO Auto-generated method stub
96+
setArray(5);
97+
// setArray(5,6);
98+
}
99+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.chen.algorithm.rectangle;
2+
3+
import org.junit.Test;
4+
5+
import java.util.ArrayList;
6+
import java.util.Iterator;
7+
8+
/**
9+
* User: chenweijie
10+
* Date: 11/6/17
11+
* Time: 9:46 PM
12+
* Description: http://www.cnblogs.com/flamebird/p/6840382.html
13+
*/
14+
public class TestSnakeCircle {
15+
16+
//判断N是偶数还是奇数,N为偶数时num=count,为奇数时num = count-1
17+
public static void getArray(int num,int count){
18+
ArrayList<ArrayList> listAll = new ArrayList<ArrayList>(count);//二维Arraylist
19+
if(num != count){//奇数时先构建最核心的1
20+
ArrayList start = new ArrayList(count);
21+
start.add(1);
22+
listAll.add(start);
23+
}
24+
for(int i=0;i<num/2;i++){
25+
ArrayList listHead = new ArrayList();//构建要加的第一行
26+
ArrayList listEnd = new ArrayList();//构建要加的最末行
27+
int k;
28+
if(num !=count)
29+
k = 2*i+3;
30+
else
31+
k = 2*i+2;
32+
for(int j=0;j<k;j++){
33+
listHead.add(k*k-j);//填充要加的第一行
34+
listEnd.add((k-2)*(k-2)+k-1+j);//填充要加的最末行
35+
if(j<(k-2)){//原有的每行加头加尾
36+
ArrayList listTem = new ArrayList();
37+
listTem = listAll.get(j);
38+
listTem.add(0,(k-2)*(k-2)+1+j);
39+
listTem.add(k*k-k-j);
40+
listAll.set(j,listTem);
41+
}
42+
}
43+
listAll.add(0,listHead);//加入第一行
44+
listAll.add(listEnd);//加入最末行
45+
}
46+
//输出
47+
for(int i=0;i<count;i++){
48+
ArrayList listTem = new ArrayList();
49+
listTem = listAll.get(i);
50+
for(Iterator iter = listTem.iterator(); iter.hasNext();){
51+
int lastValue = count*count+1 - (int)iter.next();
52+
//没有标准化格式的输出
53+
// System.out.print(lastValue+" ");
54+
System.out.printf("%3d ",lastValue);
55+
}
56+
System.out.println();
57+
}
58+
}
59+
60+
@Test
61+
public void test(){
62+
getArray(4,5);
63+
}
64+
}

0 commit comments

Comments
 (0)