File tree 1 file changed +60
-0
lines changed
src/pp/arithmetic/leetcode
1 file changed +60
-0
lines changed Original file line number Diff line number Diff line change
1
+ package pp .arithmetic .leetcode ;
2
+
3
+ import pp .arithmetic .Util ;
4
+
5
+ /**
6
+ * Created by wangpeng on 2019-07-02.
7
+ * 59. 螺旋矩阵 II
8
+ * <p>
9
+ * 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
10
+ * <p>
11
+ * 示例:
12
+ * <p>
13
+ * 输入: 3
14
+ * 输出:
15
+ * [
16
+ * [ 1, 2, 3 ],
17
+ * [ 8, 9, 4 ],
18
+ * [ 7, 6, 5 ]
19
+ * ]
20
+ * <p>
21
+ * 来源:力扣(LeetCode)
22
+ * 链接:https://leetcode-cn.com/problems/spiral-matrix-ii
23
+ * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
24
+ */
25
+ public class _59_generateMatrix {
26
+ public static void main (String [] args ) {
27
+ _59_generateMatrix generateMatrix = new _59_generateMatrix ();
28
+ int [][] ints = generateMatrix .generateMatrix (3 );
29
+ for (int i = 0 ; i < ints .length ; i ++) {
30
+ Util .printArray (ints [i ]);
31
+ }
32
+ }
33
+
34
+ /**
35
+ * 解题思路:
36
+ * 通过四个变量(2个行0~n、2个列0~n),一圈一圈的遍历,每一圈遍历的时候做四个方向的遍历
37
+ *
38
+ * @param n
39
+ * @return
40
+ */
41
+ public int [][] generateMatrix (int n ) {
42
+ int [][] matrix = new int [n ][n ];
43
+ int r1 = 0 , r2 = matrix .length - 1 ;
44
+ int c1 = 0 , c2 = matrix [0 ].length - 1 ;
45
+ int index = 1 ;
46
+ while (r1 <= r2 && c1 <= c2 ) {
47
+ for (int c = c1 ; c <= c2 ; c ++) matrix [r1 ][c ] = index ++;
48
+ for (int r = r1 + 1 ; r <= r2 ; r ++) matrix [r ][c2 ] = index ++;
49
+ if (r1 < r2 && c1 < c2 ) {
50
+ for (int c = c2 - 1 ; c > c1 ; c --) matrix [r2 ][c ] = index ++;
51
+ for (int r = r2 ; r > r1 ; r --) matrix [r ][c1 ] = index ++;
52
+ }
53
+ r1 ++;
54
+ r2 --;
55
+ c1 ++;
56
+ c2 --;
57
+ }
58
+ return matrix ;
59
+ }
60
+ }
You can’t perform that action at this time.
0 commit comments