程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> LeetCode Spiral Matrix

LeetCode Spiral Matrix

編輯:關於C++

LeetCode解題之Spiral Matrix


原題

將一個矩陣中的內容螺旋輸出。

注意點:

矩陣不一定是正方形

例子:

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

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

解題思路

控制好當前遍歷的邊界,不斷的向內縮進。需要注意的是,縮到最裡面的時候可能會出現以下幾種情況:

中心剩下一個數值
———
|3|
———

中心橫向多個數值
—————————
|3 4 5 6|
—————————

中心縱向多個數值
———
|2|
|3|
|4|
———

分別處理一下即可。

AC源碼

class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        if not matrix:
            return []
        left = top = 0
        right = len(matrix[0]) - 1
        bottom = len(matrix) - 1

        result = []
        while left < right and top < bottom:
            for i in range(left, right):
                result.append(matrix[top][i])
            for i in range(top, bottom):
                result.append(matrix[i][right])
            for i in range(right, left, -1):
                result.append(matrix[bottom][i])
            for i in range(bottom, top, -1):
                result.append(matrix[i][left])
            left += 1
            right -= 1
            top += 1
            bottom -= 1
        if left == right and top == bottom:
            result.append(matrix[top][left])
        elif left == right:
            for i in range(top, bottom + 1):
                result.append(matrix[i][left])
        elif top == bottom:
            for i in range(left, right + 1):
                result.append(matrix[top][i])
        return result


if __name__ == "__main__":
    assert Solution().spiralOrder([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]) == [1, 2, 3, 6, 9, 8, 7, 4, 5]
    assert Solution().spiralOrder([[2], [3]]) == [2, 3]
    assert Solution().spiralOrder([[2, 3]]) == [2, 3]
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved