非独立思考
public static int[][] generateMatrix(int n) {// 巧妙思路,每次“撞墙之后”,证明相应位置的上限++或下限--// 定义4个边界的上下限int leftMax = 0, rightMax = n - 1, upMax = 0, downMax = n - 1;// 按照题目要求,num=1开始,n*n结束int[][] matrix = new int[n][n];int num = 1, target = n * n;// 开始遍历while (num <= target) {// 只要还没增长到target,就继续进行4次遍历// 注意边界是等于,因为我们的初始设定就是边界是可取的边界// 上方边界填满,上限++for (int i = leftMax; i <= rightMax; i++) matrix[upMax][i] = num++;upMax++;// 右方边界填满,右限--for (int i = upMax; i <= downMax; i++) matrix[i][rightMax] = num++;rightMax--;// 下方边界填满,下限--for (int i = rightMax; i >= leftMax; i--) matrix[downMax][i] = num++;downMax--;// 左方边界填满,左限++for (int i = downMax; i >= upMax; i--) matrix[i][leftMax] = num++;leftMax++;}return matrix;}
