首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實作順時針螺旋矩陣填充與列印

     編輯:Java 相關知識

給定正整數 N,輸出 N×N 的順時針螺旋矩陣,數字從 1 遞增至 N²。例如 N=5:

 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. 初始位置 (0,1),方向向量 (1,0) 向右。
  2. 每填入一個數字,檢查是否到達當前方向的終點 (計數器 sum)。
  3. 到達終點則順時針旋轉方向向量:
    水平→垂直:py = px; px = 0; pn-- (步數減 1)
    垂直→水平:px = -py; py = 0 (步數不變,但下一輪水平會再減 1)
  4. 為了列印時符合直觀行列,矩陣存儲時做轉置 (rect[x][y]),輸出時再轉回 (rect[j][i])。

完整程式碼

import java.util.Scanner;

public class SpiralMatrix {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] rect = new int[n + 1][n + 1]; // 1-based 索引方便邏輯

        int x = 0, y = 1;      // 當前座標
        int px = 1, py = 0;    // 方向增量 (初始向右)
        int pn = n;            // 當前方向剩餘步數
        int sum = n;           // 當前方向終點計數

        for (int i = 1; i <= n * n; i++) {
            x += px; y += py;
            rect[x][y] = i;

            if (i == sum) { // 到達轉角
                if (px != 0) { // 水平 -> 垂直
                    pn--;       // 步數遞減
                    sum += pn;
                    py = px; px = 0;
                } else {       // 垂直 -> 水平
                    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();
        }
    }
}

執行測試

輸入 5,Console 輸出即為上述 5×5 螺旋矩陣。演算法時間複雜度 O(N²),空間複雜度 O(N²),邏輯緊湊無冗餘判斷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved