Skip to content

Instantly share code, notes, and snippets.

@shixiaoyu
Created December 10, 2019 06:53
Show Gist options
  • Save shixiaoyu/f669c105b379f224e914daa6b7d1e24f to your computer and use it in GitHub Desktop.
Save shixiaoyu/f669c105b379f224e914daa6b7d1e24f to your computer and use it in GitHub Desktop.
public int[][] generateMatrix(int n) {
assert n >= 0;
int[][] res = new int[n][n];
this.generateMatrixHelper(0, 0, n, n, res, 1);
return res;
}
private void generateMatrixHelper(
int i,
int j,
int rowSize,
int colSize,
int[][] matrix,
int num
) {
if (rowSize <= 0 || colSize <= 0) {
return;
}
if (rowSize == 1 && colSize == 1) {
matrix[i][j] = num;
return;
}
if (rowSize == 1) {
for (int k = j; k < j + colSize; k++) {
matrix[i][k] = num;
num++;
}
return;
}
if (colSize == 1) {
for (int k = i; k < i + rowSize; k++) {
matrix[k][j] = num;
num++;
}
return;
}
// do the spiral
for (int k = j; k < j + colSize; k++) {
matrix[i][k] = num++;
}
for (int k = i + 1; k < i + rowSize; k++) {
matrix[k][j + colSize - 1] = num++;
}
for (int k = j + colSize - 2; k >= i; k--) {
matrix[i + rowSize - 1][k] = num++;
}
for (int k = i + rowSize - 2; k > i; k--) { // both the start and end need to be i, j, and also care about length
matrix[k][j] = num++;
}
this.generateMatrixHelper(i + 1, j + 1, rowSize - 2, colSize - 2, matrix, num);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment