Leetcode.54 螺旋区间
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
思路:
用最直观的理解,定边界
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
| func spiralOrder(matrix [][]int) []int { if len(matrix) == 0 || len(matrix[0]) == 0 { return []int{} } ans := []int{} rowStart, rowEnd := 0, len(matrix)-1 colStart, colEnd := 0, len(matrix[0])-1 for { for i:=colStart; i<=colEnd; i++ { ans = append(ans, matrix[rowStart][i]) } rowStart += 1 if rowStart > rowEnd { break } for i:=rowStart; i<=rowEnd; i++ { ans = append(ans, matrix[i][colEnd]) } colEnd -= 1 if colStart > colEnd { break } for i:=colEnd; i>=colStart; i-- { ans = append(ans, matrix[rowEnd][i]) } rowEnd -= 1 if rowStart > rowEnd { break } for i:=rowEnd; i>=rowStart; i-- { ans = append(ans, matrix[i][colStart]) } colStart += 1 if colStart > colEnd { break } } return ans }
|