1. 程式人生 > 其它 >LeetCode 0059 Spiral Matrix II

LeetCode 0059 Spiral Matrix II

原題傳送門

1. 題目描述

2. Solution

1、思路分析
將num in [1, n*n],按右、下、左、上的順序依次放入result中,用rowBegin,rowEnd,colBegin,colEnd控制邊界。

2、程式碼實現

package Q0099.Q0059SpiralMatrixII;

/*
  思路:
  num儲存1~n*n,現在需要把num按回形放入指定位置
 */
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        if (n <= 0) return matrix;

        int num = 1, rowBegin = 0, rowEnd = n - 1, colBegin = 0, colEnd = n - 1;
        while (rowBegin <= rowEnd && colBegin <= colEnd) {
            // 向 右
            for (int i = colBegin; i <= colEnd; i++) matrix[rowBegin][i] = num++;
            rowBegin++;

            // 向 下
            for (int i = rowBegin; i <= rowEnd; i++) matrix[i][colEnd] = num++;
            colEnd--;

            // 向 左
            for (int i = colEnd; i >= colBegin; i--) matrix[rowEnd][i] = num++;
            rowEnd--;

            // 向上
            for (int i = rowEnd; i >= rowBegin; i--) matrix[i][colBegin] = num++;
            colBegin++;
        }
        return matrix;
    }
}

3、複雜度分析
時間複雜度: O(n^2)
空間複雜度: O(1)