螺旋矩陣

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix:
            return []
        
        result = []
        
        from collections import deque
        vector = deque([[0, 1], [1, 0], [0, -1], [-1, 0]]) #使用了循環隊列不停換方向走
        
        Pos = [0, 0]
        result.append(matrix[Pos[0]][Pos[1]])
        matrix[Pos[0]][Pos[1]] = None
        
        v = vector.popleft()
        vector.append(v)
        
        while(not self.End(matrix, Pos)): #不撞牆(None)就一直走,撞牆換方向直到最後一個元素
            Pos = [Pos[0] + v[0], Pos[1] + v[1]]
            try:
                if matrix[Pos[0]][Pos[1]] == None:
                    raise IndexError
                result.append(matrix[Pos[0]][Pos[1]])
                matrix[Pos[0]][Pos[1]] = None
            except IndexError:
                Pos = [Pos[0] - v[0], Pos[1] - v[1]]
                v = vector.popleft()
                vector.append(v)
                
        return result
                
    def End(self, matrix, pos): #是否是最後一個位置
        try:
            if matrix[pos[0] + 1][pos[1]] is not None:
                return False
        except IndexError:
            pass
        try:
            if matrix[pos[0] - 1][pos[1]] is not None:
                return False
        except IndexError:
            pass
        try:
            if matrix[pos[0]][pos[1] + 1] is not None:
                return False
        except IndexError:
            pass
        try:
            if matrix[pos[0]][pos[1] - 1] is not None:
                return False
        except IndexError:
            pass
        return True

有哪位大佬可以告訴我,爲何同樣一段代碼,在力扣上時間運行會不一樣啊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章