随笔:把1,2,3…n*n 的数字按照顺时针螺旋的形式填入数字矩阵

本文介绍了一个有趣且实用的算法——螺旋填充矩阵。该算法能够根据输入的整数n,生成一个n×n的矩阵,并按顺时针螺旋方向填充1至n*n的整数。文章详细解释了填充规则,并提供了完整的Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


从键盘输入一个整数(1~20)

则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:

输入数字2,则程序输出:

1 2

4 3

输入数字3,则程序输出:

1 2 3

8 9 4

7 6 5

输入数字4, 则程序输出:

1 2  3 4

12 13 14 5

11 16 15 6

10  9 8  7


分析:通过输出结果,如果将数据存在一个二维数组中,可以看出这样一种规律,数字的填充顺序为:

1.行坐标不变列坐标递增,当列坐标超出最大范围或者要填充的位置已经被填充过,则跳转到步骤2,

2.行坐标递增列坐标不变,当行坐标超过最大范围或者要填充的位置已经被填充过,则跳转到步骤3

3.行坐标不变列坐标递减,当列坐标小于最小范围或者要填充的位置已经被填充过,则跳转到步骤4

4.行坐标递减列坐标不变,当行坐标小于最小范围或者要填充的位置已经被填充过,则跳转到步骤1

只要循环执行以上四个步骤,每执行一个步骤则填充一个数据,直到全部数据填充完则结束

对应java代码如下:

public class FillNumber
{
	
	public static void main(String[] args)
	{
		int n=5;//测试数据
		int[][] numberMatrix=getNumberMatrix(n);
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				System.out.printf("%-4d",numberMatrix[i][j]);
			}
			System.out.println();
		}
	}
	public static int[][] getNumberMatrix(int n){
		
		int[][] result=new int[n][n];
		
		int number=1; //填充二维数组的数字
		int i=0;	//行下标
		int j=0;	//列下标
		//代表如何填充数字,1表示从左到右填充,2表示从上到下填充,3表示从右到左填充,4表示下到上填充
		char type=1; 
		while(number<=n*n){
			result[i][j]=number;
			if(type==1){
				j++;
				if(j==n||result[i][j]!=0){
					type=2;
					i++;
					j--;
				}
			}else if(type==2){
				i++;
				if(i==n||result[i][j]!=0){
					type=3;
					j--;
					i--;
				}
			}else if(type==3){
				j--;
				if(j==-1||result[i][j]!=0){
					type=4;
					j++;
					i--;
				}
			}else{
				i--;
				if(i==0||result[i][j]!=0){
					type=1;
					i++;
					j++;
				}
			}
			number++;
		}
		return result;
	}
}


输出结果:

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值