「leetcode」54. 螺旋矩阵
思路
- 从矩阵整体上考虑,不要考虑每个具体坐标的移动
- 将矩阵抽象为矩形的嵌套,外层处理完成后,内层的处理逻辑与外层相同
- 处理特殊情况。当矩阵为1行n列,n行1列,m行n列时的情况
- 分别记录矩阵左上与右下两个位置,通过其行列坐标的变化,记录矩阵元素
func spiralOrder(matrix [][]int) []int {
if len(matrix) == 0 || len(matrix[0]) == 0 {
return []int{}
}
lR, lC := 0, 0
rR, rC := len(matrix)-1, len(matrix[0])-1
res := []int{}
for lR <= rR && lC <= rC {
if lR == rR {
for i := lC; i <= rC; i++ {
res = append(res, matrix[lR][i])
}
} else if lC == rC {
for i := lR; i <= rR; i++ {
res = append(res, matrix[i][lC])
}
} else {
curR, curC := lR, lC
for curC != rC {
res = append(res, matrix[lR][curC])
curC++
}
for curR != rR {
res = append(res, matrix[curR][rC])
curR++
}
for curC != lC {
res = append(res, matrix[rR][curC])
curC--
}
for curR != lR {
res = append(res, matrix[curR][lC])
curR--
}
}
lR++
lC++
rR--
rC--
}
return res
}