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
投稿

猜你喜欢

  • 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
  • asp之家 软件编程 m.aspxhome.com