#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].
'''
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if not matrix:
return []
up,down = 0,len(matrix) - 1
left,right = 0,len(matrix[0]) - 1
ret = []
while down >= up and left <= right:
col = left
while col <= right:
if matrix[up][col] != None: #给用过的数据做标记,防止重复使用
ret.append(matrix[up][col])
matrix[up][col] = None
col += 1
up += 1
row = up
while row <= down:
if matrix[row][right] != None:
ret.append(matrix[row][right])
matrix[row][right] = None
row += 1
right -= 1
col = right
while col >= left:
if matrix[down][col] != None:
ret.append(matrix[down][col])
matrix[down][col] = None
col -= 1
down -= 1
row = down
while row >= up:
if matrix[row][left] != None:
ret.append(matrix[row][left])
matrix[row][left] = None
row -= 1
left += 1
return ret
if __name__ == "__main__":
s = Solution()
print s.spiralOrder([[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]])
print s.spiralOrder([[ 1, 2, 3 ,4],[5, 6 ,7,8],[9,10,11,12 ],[13,14,15,16]])
print s.spiralOrder([[1,2,3,4]])
a = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]]
b = [i*2 for i in a]
print s.spiralOrder(a)
print s.spiralOrder(b)
61 leetcode - Spiral Matrix
最新推荐文章于 2024-09-14 18:52:56 发布