原题
https://leetcode.cn/problems/spiral-matrix/description/
思路
循环
复杂度
时间:O(n)
空间:O(n)
Python代码
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
ans = []
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
# 方向
d = 0
m = len(matrix)
n = len(matrix[0])
count = 0
i, j = 0, 0
while count < m * n:
ans.append(matrix[i][j])
# 标记已走的
matrix[i][j] = 1000
count += 1
if (
i + directions[d][0] < 0
or i + directions[d][0] == m
or j + directions[d][1] < 0
or j + directions[d][1] == n
):
d = (d + 1) % 4
elif matrix[i + directions[d][0]][j + directions[d][1]] == 1000:
d = (d + 1) % 4
i += directions[d][0]
j += directions[d][1]
return ans
Go代码
func spiralOrder(matrix [][]int) []int {
var ans []int
directions := [][]int{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}
// 方向
d := 0
m, n := len(matrix), len(matrix[0])
count := 0
i, j := 0, 0
for count < m*n {
ans = append(ans, matrix[i][j])
// 标记已走过的
matrix[i][j] = 1000
count++
if i+directions[d][0] < 0 || i+directions[d][0] == m ||
j+directions[d][1] < 0 || j+directions[d][1] == n ||
matrix[i+directions[d][0]][j+directions[d][1]] == 1000 {
d = (d + 1) % 4
}
i += directions[d][0]
j += directions[d][1]
}
return ans
}

被折叠的 条评论
为什么被折叠?



