forked from ChienJuiLin/leetcode_heprecsler
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathleetCode_5.py
More file actions
84 lines (71 loc) · 1.91 KB
/
leetCode_5.py
File metadata and controls
84 lines (71 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
'''
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
'''
class Solution:
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if matrix == []: return []
t = len(matrix) * len(matrix[0])
rlen = len(matrix)
clen = len(matrix[0])
r,c = 0,-1
move = 1
ans = list()
rowStep = rlen - 1
cur_rowStep = 0
columnStep = clen
cur_columnStep = 0
state = 'right'
for i in range(t):
if state == 'right':
c +=1
ans.append(matrix[r][c])
cur_columnStep += 1
if cur_columnStep == columnStep:
state = 'down'
cur_columnStep = 0
columnStep -= 1
elif state == 'down':
r +=1
ans.append(matrix[r][c])
cur_rowStep += 1
if cur_rowStep == rowStep:
state = 'left'
cur_rowStep = 0
rowStep -= 1
elif state == 'left':
c -=1
ans.append(matrix[r][c])
cur_columnStep += 1
if cur_columnStep == columnStep:
state = 'up'
cur_columnStep = 0
columnStep -= 1
elif state == 'up':
r -=1
ans.append(matrix[r][c])
cur_rowStep += 1
if cur_rowStep == rowStep:
state = 'right'
cur_rowStep = 0
rowStep -= 1
return ans