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

最近看到一道有点意思的逻辑算法题,便着手实现一下。题目是要求打印 出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能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • java旋转二维数组实例

    本文实例讲述了java旋转二维数组的操作,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package test; /*  *     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 String 转成Double二维数组的方法

    WHY 朋友在群里求助一个问题,问题原型是这样的: String str = "{{10.14, 11.24, 44.55, 41.01},{12.10, 14.21, 52.14, 50.44},{14.44, 16.12, 45.42, 47.55}}"; 转成double[][]{ {10.14, 11.24, 44.55, 41.01}, {12.10, 14.21, 52.14, 50.44}, {14.44, 16.12, 45.42, 47.55} } 也就是把一个可以转

  • Java编程中二维数组的初始化和基本操作实例

    Java二维数组的声明和初始化 1.二维数组可以看成以数组为元素的数组: 2.Java中二维数组的声明和初始化应按照从高维到低维的顺序进行. 实例: 静态初始化: Array2.java: 程序代码 public class Array2 { public static void main(String args[]) { int a[][] = {{1,2},{3,4,5,6},{7,8,9}} ; for(int i=0 ; i <a.length ; i++) { for(int j=0

  • java定义二维数组的几种写法(小结)

    如下所示: //定义二维数组写法1 class numthree { public static void main(String[] args) { float[][] numthree; //定义一个float类型的2维数组 numthree=new float[5][5]; //为它分配5行5列的空间大小 numthree[0][0]=1.1f; //通过下标索引去访问 1行1列=1.1 numthree[1][0]=1.2f; // 2行1列=1.2 numthree[2][0]=1.3

  • java 求解二维数组列最小值

    java 求解二维数组列最小值 比较二维数组列最小值,组成一个新数组返回. 实现核心算法,不需要使用IO 输入:{{5,6,1,16},{7,3,9}} 输出:{1,3} import java.util.Arrays; public class Col { public static int[] getColMin(int a[][]) { int[] res = new int[a.length]; for (int i = 0; i < a.length; i++) { int[] s =

  • java 二维数组矩阵乘法的实现方法

    复制代码 代码如下: public interface IMatrixMultiple {     public int[][] mmltiple(int[][]a ,int [][]b); } ?public class MatrixMultiple implements IMatrixMultiple { @Override    public int[][] mmltiple(int[][] a, int[][] b) {         int [][] result = new int

  • java实现二维数组转json的方法示例

    本文实例讲述了java实现二维数组转json的方法.分享给大家供大家参考,具体如下: package Tsets; public class erweiTojson { public static void main(String[] args) { String[][] blogList = { {"2008/07/07", "NetBeans New and Cool", "Tim Boudreau"}, {"2008/07/07&

  • java实现二维数组转置的方法示例

    本文实例讲述了java实现二维数组转置的方法.分享给大家供大家参考,具体如下: 这里在文件中创建Test2.Exchange.Out三个类 在Exchange类中编写exchange()方法,在方法中创建两个数组arraryA.arraryB,arraryB[j][i]=arraryA[i][j]实现数组的转置. 在Out类中编写out()方法,在方法中用for循环遍历实现输出. 具体代码如下: package Tsets; import java.util.*; public class Te

  • Java二维数组简单定义与使用方法示例

    本文实例讲述了Java二维数组简单定义与使用方法.分享给大家供大家参考,具体如下: Java的二维数组是先创建一个一维数组,然后该数组的元素再引用另外一个一维数组.在使用二维数组的时候,通过两个中括号[]来访问每一层维度的引用,直到访问到最终的数据. public class MultiDimArray{ /** * @param args */ public static void main(String[] args) { int[][] arr = new int[3][]; arr[0]

  • java 遍历Map及Map转化为二维数组的实例

    java 遍历Map及Map转化为二维数组的实例 实例代码: import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Test { public static void main(String[] args) { int a = 0, b = 0, c = 0; // 第一种:通过Map.keySet()遍历Map及将Map转化为二维数组 Map<String, String>

随机推荐