LeetCode54. 螺旋矩陣 java實現
題目
- 難度 中
- 給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。
示例 1:
輸入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
輸出: [1,2,3,6,9,8,7,4,5]
示例 2:
輸入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
輸出: [1,2,3,4,8,12,11,10,9,5,6,7]
思路
找出每個點的坐標,每個點每次延順時針分別為右、下、左、上四個方向走一個位置,維護一個方向變量,不同方向時做相應的邊界判斷。每次遇到邊界,必定改變方向,縮短原邊界大小。
解法
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
|
public List<Integer> spiralOrder( int [][] matrix) { ArrayList<Integer> order = new ArrayList<>(); if (matrix.length == 0 || matrix[ 0 ].length == 0 ) { return order; } int m = matrix.length; int n = matrix[ 0 ].length; int len = m * n; int row = 0 ; int col = 0 ; int leftMin = 0 ; //每次走上下左右四個方向,一次只走一格 //注意點,因為是從(1,1)開始走的,所以上界最小row是第二行1 int topMin = 1 ; //初始方向值 int k = 0 ; int [][] dir = { { 1 , 0 , - 1 , 0 }, { 0 , 1 , 0 , - 1 } }; for ( int i = 0 ; i < len; i++) { order.add(matrix[row][col]); col += dir[ 0 ][k % 4 ]; row += dir[ 1 ][k % 4 ]; switch (k % 4 ) { case 0 : //右 if (col > n - 1 ) { col = n - 1 ; row++; k++; n--; } break ; case 1 : //下 if (row > m - 1 ) { row = m - 1 ; col--; k++; m--; } break ; case 2 : //左 if (col < leftMin) { col = leftMin; leftMin++; row--; k++; } break ; case 3 : //上 if (row < topMin) { row = topMin; topMin++; col++; k++; } break ; } } return order; } |
結果
2ms 戰勝99.74%
到此這篇關于Java實現LeetCode(螺旋矩陣)的文章就介紹到這了,更多相關Java實現螺旋矩陣內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_29777823/article/details/82357113