Skip to content

Commit 6ab2632

Browse files
author
wangpeng
committed
feat(MEDIUM): add _59_generateMatrix
1 parent 425782b commit 6ab2632

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+
}

0 commit comments

Comments
 (0)