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();
 }
}

}

输出测试

Java实现顺时针输出螺旋二维数组的方法示例

来源:http://blog.csdn.net/yyh352091626/article/details/52238931

标签:java,二维数组,顺时针
0
投稿

猜你喜欢

  • Java 设计模式之责任链模式及异步责任链详解

    2021-08-08 19:14:23
  • Java TreeMap排序算法实例

    2023-02-25 10:26:20
  • SpringBoot配置文件中密码属性加密的实现

    2022-07-08 18:32:03
  • SpringMVC @RequestBody自动转json Http415错误的解决

    2022-09-12 13:12:34
  • Java中Socket用法详解

    2021-07-27 07:14:07
  • 使用@RequestBody配合@Valid校验入参参数

    2023-05-04 22:36:09
  • c#实现flv解析详解示例

    2022-06-10 22:57:21
  • Java如何使用httpclient检测url状态及链接是否能打开

    2022-07-03 21:23:25
  • RestTemplate 401 获取错误信息的处理方案

    2023-01-14 10:37:44
  • 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
  • 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
  • asp之家 软件编程 m.aspxhome.com