本文共 2448 字,大约阅读时间需要 8 分钟。
题目地址:
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 )
转载地址:http://iihii.baihongyu.com/