回形数的Java代码
程序员文章站
2022-04-05 16:06:53
...
每天一道算法题
题目:回形数(只是我的理解)
这就和我一起来看看这个题的题目 吧!(由于是后期记忆,所以不是和面试的时候一模一样,但是大概意思是相同的)如下图所示。
来我们一起来分析分析这个题。咋一看是不是非常简单!(恭喜你,有这样的心态是非常好的)
分析题目
- 首先用户输入的数字便决定了矩阵(方阵)的维度,可以理解吧?
- 其次分析矩阵中的数字。数字就像小时候我们吃过的面包圈,当然这个是方的,就好比我第一次的脑袋(方的)。数字逐次加1,一圈一圈的往里面绕,绕到矩阵没有位置了才停下来。(这样一分析是不是感觉解题思路清晰了呢?悄悄的说一声,我反正没有)
解题
解题思路
- 首先我们可以确定的是,它是一圈一圈走的,只是说起点、开始数据不同。其它的好像也没别的。就好比我们看到的一个个“口”字放缩到一起。如下图
- 图都给你们画出来了(吐槽一下,这不是我画的哦)。言归正传,上述的图给人是不是会绕晕在里面,所以我们应该用到的是递归函数有问题吗?我们只需要写好最外层的,那里面的那些是不是就一个个就会写好。当然会有人考虑到用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 ;
}
}
}
上一篇: 向升序数组中插入元素的三种方式
下一篇: MySQL——多表查询详细介绍以及实例