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,二维数组,顺时针
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java 设计模式之责任链模式及异步责任链详解
2021-08-08 19:14:23
![](https://img.aspxhome.com/file/2023/9/72639_0s.png)
Java TreeMap排序算法实例
2023-02-25 10:26:20
SpringBoot配置文件中密码属性加密的实现
2022-07-08 18:32:03
![](https://img.aspxhome.com/file/2023/8/64018_0s.jpg)
SpringMVC @RequestBody自动转json Http415错误的解决
2022-09-12 13:12:34
![](https://img.aspxhome.com/file/2023/0/63070_0s.jpg)
Java中Socket用法详解
2021-07-27 07:14:07
![](https://img.aspxhome.com/file/2023/1/113421_0s.jpg)
使用@RequestBody配合@Valid校验入参参数
2023-05-04 22:36:09
![](https://img.aspxhome.com/file/2023/2/60692_0s.png)
c#实现flv解析详解示例
2022-06-10 22:57:21
![](https://img.aspxhome.com/file/2023/4/69824_0s.jpg)
Java如何使用httpclient检测url状态及链接是否能打开
2022-07-03 21:23:25
RestTemplate 401 获取错误信息的处理方案
2023-01-14 10:37:44
![](https://img.aspxhome.com/file/2023/7/85427_0s.png)
Spring Batch批处理框架使用解析
2021-12-24 03:41:19
详述 DB2 分页查询及 Java 实现的示例
2023-04-21 12:39:12
java操作elasticsearch的案例解析
2021-06-27 19:17:13
Java集合的Collection接口和List接口详解
2021-11-02 05:24:44
springboot 2.0 mybatis mapper-locations扫描多个路径的实现
2023-07-12 02:30:53
java教学笔记之对象的创建与销毁
2023-08-14 02:00:39
Intellij IDEA 2019 最新乱码问题及解决必杀技(必看篇)
2023-12-04 18:30:02
![](https://img.aspxhome.com/file/2023/6/106156_0s.jpg)
java如何将int数组转化为Integer数组
2021-07-19 04:22:37
Spring MVC 基于URL的映射规则(注解版)
2021-05-23 15:05:09
java获取当前时间的四种方法代码实例
2023-11-28 19:22:53
详解MyBatis 常用写法
2022-07-14 19:36:14