JAVA实现【螺旋矩阵】输出的新思路

笔试遇到了一个题目,如何对所输入的n,实现一个螺旋输出的n*n矩阵,当时没想好,回来以后想了一个和大部分答案不大一样的新办法,大家可以看看

代码如下

public class pc {
	public static void main(String[] args) {
		//输入矩阵规模
		int n=new Scanner(System.in).nextInt();
		int[][] A=computeCycle(n, 1);//逐层计算
		int[][]temp=null;
		int m=n;
		int initial=A[1][0]+1;
		if(n%2==0) {//偶数规模
			while(m>2) {//递归合并
				temp=computeCycle(m-2, initial);
				A=connect2mat(A, temp, m-2, n);
				m-=2;
				initial=temp[1][0]+1;
			}
		}else {//奇数规模
			while(m>3) {
				temp=computeCycle(m-2, initial);
				A=connect2mat(A, temp, m-2, n);
				m-=2;
				initial=temp[1][0]+1;
			}
			A[n/2][n/2]=n*n;
		}
		for(int x=0;x!=n;++x) {
			for(int y=0;y!=n;++y) {		
				System.out.print(A[x][y]+"\t");
			}
			System.out.println();
		}
	}


	public static int[][] computeCycle(int n,int initial) {
		int[][] A=new int[n][n];
		if(n==1) {
			A[0][0]=initial;
		}else {
			/*       核心算法         */
			//第一层-上
			for(int x=0;x!=n;++x) {
				A[0][x]=x+initial;
			}
			//第一层-右
			for(int x=1;x!=n;++x) {
				A[x][n-1]=x+A[0][n-1];
			}
			//第一层-下
			int i=1;
			for(int x=n-2;x!=-1;--x) {
				A[n-1][x]=A[n-1][n-1]+i++;
			}
			//第一层-左
			int j=1;
			for(int x=n-2;x!=0;--x) {
				A[x][0]=A[n-1][0]+j++;
			}
		}
		return A;
	}
	public static int[][] connect2mat(int[][]A,int[][]B,int n,int m) {
		int temp=(m-n)/2;
		for(int a=0;a!=n;++a) {
			for(int b=0;b!=n;++b) {
				A[a+temp][b+temp]=B[a][b];
			}
		}
		return A;
	}
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值