LeetCode #59 Spiral Matrix II 螺旋矩陣 II

59 Spiral Matrix II 螺旋矩陣 II

Description:
Given a positive integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order.

Example:

Input: 3
Output:

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

題目描述:
給定一個(gè)正整數(shù) n,生成一個(gè)包含 1 到 n^2 所有元素,且元素按順時(shí)針順序螺旋排列的正方形矩陣。

示例 :

輸入: 3
輸出:

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

思路:

參考LeetCode #54 Spiral Matrix 螺旋矩陣
從左上右下四個(gè)方向模擬矩陣螺旋
時(shí)間復(fù)雜度O(n ^ 2), 空間復(fù)雜度O(n ^ 2)

代碼:
C++:

class Solution 
{
public:
    vector<vector<int>> generateMatrix(int n) 
    {
        vector<vector<int>> result(n, vector<int>(n, 0));
        int left = 0, right = n - 1, up = 0, down = n - 1, c = 1;
        while (true)
        {
            for (int i = left; i <= right; i++) result[up][i] = c++;
            if (++up > down) break;
            for (int i = up; i <= down; i++) result[i][right] = c++;
            if (--right < left) break;
            for (int i = right; i >= left; i--) result[down][i] = c++;
            if (--down < up) break;
            for (int i = down; i >= up; i--) result[i][left] = c++;
            if (++left > right) break;
        }
        return result;
    }
};

Java:

class Solution {
    public int[][] generateMatrix(int n) {
        int result[][] = new int[n][n], left = 0, right = n - 1, up = 0, down = n - 1, c = 1, sq = n * n;
        while (c <= sq) {
            for (int i = left; i <= right; i++) result[up][i] = c++;
            ++up;
            for (int i = up; i <= down; i++) result[i][right] = c++;
            --right;
            for (int i = right; i >= left; i--) result[down][i] = c++;
            --down;
            for (int i = down; i >= up; i--) result[i][left] = c++;
            ++left;
        }
        return result;
    }
}

Python:

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        result, left, right, up, down, c, sq = [[0 for _ in range(n)] for _ in range(n)], 0, n - 1, 0, n - 1, 1, n ** 2;
        while c <= sq:
            for i in range(left, right + 1):
                result[up][i] = c
                c += 1
            up += 1
            for i in range(up, down + 1):
                result[i][right] = c
                c += 1
            right -= 1
            for i in range(right, left - 1, - 1):
                result[down][i] = c
                c += 1
            down -= 1
            for i in range(down, up - 1, -1):
                result[i][left] = c
                c += 1
            left += 1
        return result
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容