Description:
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

题意:给定一个整数n,返回一个n阶方阵,其中的元素按照螺旋的方式填充元素1到n*n;如图所示:

LeetCode-Spiral Matrix II_Java

解法:这一道题其实和​​Spiral Matrix​​是一样的,只不过一个是按照螺旋方式遍历元素,一个是按照螺旋方式填充元素,详细讲解可以参照Sprial Matrix的讲解;

Java
class Solution {
public int[][] generateMatrix(int n) {
int[][] result = new int[n][n];
boolean[][] visited = new boolean[n][n];
int cnt = 0;
int[][] step = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int stepIndex = 0;
int row = 0;
int col = 0;
while (cnt++ < n * n) {
result[row][col] = cnt;
visited[row][col] = true;
int tempRow = row + step[stepIndex][0];
int tempCol = col + step[stepIndex][1];
if (tempRow >= 0 && tempRow < n &&
tempCol >= 0 && tempCol < n &&
!visited[tempRow][tempCol]) {
row = tempRow;
col = tempCol;
} else {
stepIndex = (stepIndex + 1) % step.length;
row += step[stepIndex][0];
col += step[stepIndex][1];
}
}
return result;
}
}