题目地址:https://leetcode.com/problems/spiral-matrix-ii/description/
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
题目叫螺旋矩阵,一看示例就明白是什么意思,这种题目的大致思想就是往矩阵里填数字,然后再输出,关键点就是控制好方向和边界就行了。
public class SpiralMatrixII {
public static int[][] generateMatrix(int n) {
int[][] result = new int[n][n];
int k = 1;
int sqrN = n * n;
boolean goLeft = true;
boolean goDown = false;
boolean goRight = false;
boolean goUp = false;
int i = 0;
int j = 0;
int block = n - 1;
while (k <= sqrN) {
if (goLeft) {
if (j < block) {
result[i][j] = k;
j++;
} else if (j == block) {
//到达边界则修改方向
result[i][j] = k;
goLeft = false;
goDown = true;
i++;
}
} else if (goDown) {
if (i < block) {
result[i][j] = k;
i++;
} else if (i == block) {
result[i][j] = k;
goDown = false;
goRight = true;
j--;
}
} else if (goRight) {
if (j > n - 1 - block) {
result[i][j] = k;
j--;
} else if (j == n - 1 - block) {
result[i][j] = k;
goRight = false;
goUp = true;
block--;
i--;
}
} else if (goUp) {
if (i > n - 1 - block) {
result[i][j] = k;
i--;
} else if (i == n - 1 - block) {
result[i][j] = k;
goUp = false;
goLeft = true;
j++;
}
}
k++;
}
return result;
}
public static void print2DArray(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print("[");
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println("]");
}
}
public static void main(String[] args) {
print2DArray(generateMatrix(6));
}
}
以上算法时间复杂度为: O( n2 )