1. 程式人生 > >【LeetCode-面試算法經典-Java實現】【059-Spiral Matrix II(螺旋矩陣II)】

【LeetCode-面試算法經典-Java實現】【059-Spiral Matrix II(螺旋矩陣II)】

mod 最大 http 計算 spiral tro parent 全部 matrix

【059-Spiral Matrix II(螺旋矩陣II)】


【LeetCode-面試算法經典-Java實現】【全部題目文件夾索引】

原題

  Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
  For example,
  Given n = 3,
  You should return the following matrix:

[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5
] ]

題目大意

  給定一個整數n。生成一個n*n的矩陣,用1-n^2的數字進行螺旋填充。


解題思路

  採用計算生成法,對每個位置計算相應的數。


代碼實現

算法實現類

public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] result = new int[n][n];


        int layer;
        int k;
        for (int i = 0; i < n; i++) {
            for
(int j = 0; j < n; j++) { layer = layer(i, j, n); // 當前坐標外有幾層 // n * n - layer * layer外圍層使用的最後一個數字(也是最大的) // 坐標所在的當前層使用的第一個數字 k = n * n - (n - 2 * layer) * (n - 2 * layer) + 1; result[i][j] = k; // (n - 2 * layer - 1):四個(n - 2 * layer - 1)就是(x,y)坐標所在層的全部元素個數
if (i == layer) { // 情況一、坐標離上邊界近期 result[i][j] = k + j - layer; } else if (j == n - layer - 1) { // 情況二、坐標離右邊界近期 result[i][j] = k + (n - 2 * layer - 1) + i - layer; } else if (i == n - layer - 1) { // 情況三、坐標離下邊界近期 result[i][j] = k + 3 * (n - 2 * layer - 1) - (j - layer); } else { // 情況三、坐標離左邊界近期 result[i][j] = k + 4 * (n - 2 * layer - 1) - (i - layer); } } } return result; } /** * 在一個n*n的矩陣中,計算(x,y)坐標外有多少層,坐標從0開始計算 * * @param x 橫坐標 * @param y 縱坐標 * @param n 矩陣大小 * @return 坐標外的層數 */ public int layer(int x, int y, int n) { x = x < n - 1 - x ?

x : n - 1 - x; // 計算橫坐標離上下邊界的近期距離 y = y < n - 1 - y ? y : n - 1 - y; // 計算縱坐標離左右邊界的近期距離 return x < y ? x : y; // 較小的值為坐標的外圍層數 } }

評測結果

  點擊圖片,鼠標不釋放,拖動一段位置,釋放後在新的窗體中查看完整圖片。

技術分享

特別說明

歡迎轉載。轉載請註明出處【http://blog.csdn.net/derrantcm/article/details/47164439】

【LeetCode-面試算法經典-Java實現】【059-Spiral Matrix II(螺旋矩陣II)】