Java实现顺时针输出螺旋二维数组的方法示例
作者:LeBron_Six 时间:2022-02-03 00:11:41
最近看到一道有点意思的逻辑算法题,便着手实现一下。题目是要求打印 出N*N顺时针螺旋数组,规律如下:
// 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
Java 实现示例代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[][] rect = new int[n + 1][n + 1];
int x = 0, y = 1; // 当前遍历的位置
int px = 1, py = 0; // x/y 在当前循环方向的增量
int pn = n; // 该方向上还需要多少个数字(会递减,因为顺时针往里缩)
int sum = n; // 当前遍历方向的终点位置
/** 目标输出顺时针 */
// 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
/** 翻转矩阵为逆时针(为了便于后面逻辑处理,输出的时候再翻转回去) */
// 1 16 15 14 13
// 2 17 24 23 12
// 3 18 25 22 11
// 4 19 20 21 10
// 5 6 7 8 9
for (int i = 1; i <= n * n; i++) { // 翻转矩阵循环
// 移到下一个点(第一次方向1->5 x增量为1, y的增量为0, 第二次方向为6->9,x增量为0,y增量为1,pn减少一个)
x += px;
y += py;
rect[x][y] = i;
if (i == sum) { // 到达该方向的最后一个点
if (px == 1 || px == -1) { // x的增量不为0,则为竖向 -> 横向
pn = pn - 1; // 竖向变为横向的时候,该方向上数字的个数会减少一个
sum = sum + pn;
py = px;
px = 0;
} else { // x的增量为0, y的增量不为0,则为横向 -> 竖向
sum = sum + pn;
px = -py;
py = 0;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
System.out.print(rect[j][i] + "\t"); // 翻转复原输出
}
System.out.println();
}
}
}
输出测试
来源:http://blog.csdn.net/yyh352091626/article/details/52238931
标签:java,二维数组,顺时针
0
投稿
猜你喜欢
c# 如何实现代码生成器
2023-11-13 19:23:35
c#栈变化规则图解示例(栈的生长与消亡)
2021-10-12 05:11:11
Spring+Vue整合UEditor富文本实现图片附件上传的方法
2022-09-27 10:36:13
android自定义控件和自定义回调函数步骤示例
2021-07-11 15:50:50
java中@SuppressWarnings注解用法详解
2023-09-20 23:11:40
浅析Java中的异常处理机制
2021-08-19 05:42:48
SpringBoot如何接收Post请求Body里面的参数
2023-07-30 13:43:35
Android仿淘宝物流追踪的实例代码
2021-08-19 22:57:23
C# XML序列化方法及常用特性总结分析
2021-12-27 02:23:33
c# 使用线程对串口serialPort进行收发数据(四种)
2023-06-20 13:05:48
实例讲解Java的Spring框架中的控制反转和依赖注入
2023-04-24 17:44:49
SpringBoot整合Jackson超详细用法(附Jackson工具类)
2023-05-31 23:56:06
springboot+vue实现登录功能的最新方法整理
2022-08-31 21:40:23
java读取properties文件的方法
2021-12-25 11:30:36
spring mvc实现文件上传并携带其他参数的示例
2023-11-20 11:54:06
基于Android中实现定时器的3种解决方法
2022-02-10 15:03:53
java swing GUI窗口美化方式
2023-04-03 00:13:56
Java实现顺序栈原理解析
2021-08-26 15:47:16
C#图像处理之图像平移的方法
2021-12-16 08:38:37
Android自定义控件实现手势密码
2023-12-23 20:45:57