LSGO——LeetCode實戰(數組系列): 59題 螺旋矩陣|| (Spiral Matrix ||)

原題:

給定一個正整數 n,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

示例:

輸入: 3
輸出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/spiral-matrix-ii
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解法一:

思路:類似於剝洋蔥那種,順時針得逐層進行填充。

程序一:

先對第一層進行填充即temp == 1 時,之後對第二層即temp == 2 時進行填充,逐層進行填充。同時第54的螺旋矩陣同樣也可以使用這個方法進行遍歷。
** 這個程序我覺得最巧妙的地方在於使用了temp來控制遍歷的層數。 **

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        temp = 1
        start = 0
        mat = [[0 for _ in range(n)] for _ in range(n)]
        while temp <= n:
            for i in range(temp-1, n - temp+1): # left to right
                start  += 1
                mat[temp-1][i] = start
            for i in range(temp, n - temp + 1): # top to bottom
                start  += 1
                mat[i][n-temp] = start
            for i in range(n - temp -1 , temp-2, -1): # right to left
                start  += 1
                mat[n-temp][i] = start
            for i in range(n - temp - 1, temp-1, -1): # bottom to top
                start  += 1
                mat[i][temp-1] = start
            temp  += 1
        return mat

程序二:

思路:同樣也是逐層遍歷,但是程序的實現方法是使用四個變量進行邊界控制,與上一個程序僅僅使用一個temp變量有所不同。

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        l, r, t, b = 0, n - 1, 0, n - 1
        mat = [[0 for _ in range(n)] for _ in range(n)]
        num, tar = 1, n * n
        while num <= tar:
            for i in range(l, r + 1): # left to right
                mat[t][i] = num
                num += 1
            t += 1
            for i in range(t, b + 1): # top to bottom
                mat[i][r] = num
                num += 1
            r -= 1
            for i in range(r, l - 1, -1): # right to left
                mat[b][i] = num
                num += 1
            b -= 1
            for i in range(b, t - 1, -1): # bottom to top
                mat[i][l] = num
                num += 1
            l += 1
        return mat
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章