回形数的Java代码

题目:回形数(只是我的理解)

这就和我一起来看看这个题的题目 吧!(由于是后期记忆,所以不是和面试的时候一模一样,但是大概意思是相同的)如下图所示。
在这里插入图片描述
来我们一起来分析分析这个题。咋一看是不是非常简单!(恭喜你,有这样的心态是非常好的)

分析题目

  1. 首先用户输入的数字便决定了矩阵(方阵)的维度,可以理解吧?
  2. 其次分析矩阵中的数字。数字就像小时候我们吃过的面包圈,当然这个是方的,就好比我第一次的脑袋(方的)。数字逐次加1,一圈一圈的往里面绕,绕到矩阵没有位置了才停下来。(这样一分析是不是感觉解题思路清晰了呢?悄悄的说一声,我反正没有)

解题

解题思路

  1. 首先我们可以确定的是,它是一圈一圈走的,只是说起点、开始数据不同。其它的好像也没别的。就好比我们看到的一个个“”字放缩到一起。如下图
    在这里插入图片描述
  2. 图都给你们画出来了(吐槽一下,这不是我画的哦)。言归正传,上述的图给人是不是会绕晕在里面,所以我们应该用到的是递归函数有问题吗?我们只需要写好最外层的,那里面的那些是不是就一个个就会写好。当然会有人考虑到用while循环,其实也能做。看个人喜好了。
    话不多说,上代码。

Java代码

我也是自己研究的,所以可能方法上还有更好的,以及代码的冗余也是有可能改进的。这个任务就交给看到它的你,给我提提意见咯!额,好像没啥了。那就有空常来看看这个可怜人的文章 吧(虽然不多,后续会继续更新)

import java.util.Scanner;

public class HuiXingShu{
	public static void main(String[] args) {
		
//		这部分主要是让用户输入一个整数(维度)
		System.out.print("请输入你的维度:");
		Scanner scanner = new Scanner(System.in);
		int Weidu = scanner.nextInt();
		
//		这部分是定义一个二维数组
		int[][] array = new int[Weidu][Weidu];
		
//		调用递归函数
		HuiXin(array,0,Weidu,1);
		
//		打印相应的矩阵到屏幕上
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array.length; j++) {
				System.out.printf("%-3d ",array[i][j]);
			}
			System.out.println();
		}
	}
	
//	递归函数(以下解释以三维的矩阵为例)其中参数解释如下:
//	array:二维数组
//	x:表示每个圈的起始横纵下标
//	Weidu:表示每个圈的大小
//	number:每个圈起始的数字
	public static void HuiXin(int[][] array,int x,int Weidu,int number){
		
		if ((Weidu-2)>=0) {
			
//			此循环是为了赋值   1,2(行下标不变,列下标变化)
			for (int i = 0; i < Weidu-1; i++) {
				array[x][x+i] = number++;
			}
			
//			此循环是为了赋值   3,4(行下标变化,列下标不变)
			for (int i = 0; i < Weidu-1; i++) {
				array[x+i][x+Weidu-1] = number++;
			}
			
//			此循环是为了赋值   5,6(行下标不变,列下标变化)
			for (int i = Weidu-1; i >0 ; i--) {
				array[x+Weidu-1][x+i] = number++;
			}
			
//			此循环是为了赋值   7,8(行下标变化,列下标不变)
			for (int i = Weidu-1; i >0 ; i--) {
				array[x+i][x] = number++;
			}
			
			HuiXin(array, x+1, Weidu-2, number);
		}
		else if ((Weidu-1)==0) {
			array[x][x] = number++;
			HuiXin(array, x+1, Weidu-2, number);
		}
		else {
			return ;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值