非独立思考

    1. public static int[][] generateMatrix(int n) {
    2. // 巧妙思路,每次“撞墙之后”,证明相应位置的上限++或下限--
    3. // 定义4个边界的上下限
    4. int leftMax = 0, rightMax = n - 1, upMax = 0, downMax = n - 1;
    5. // 按照题目要求,num=1开始,n*n结束
    6. int[][] matrix = new int[n][n];
    7. int num = 1, target = n * n;
    8. // 开始遍历
    9. while (num <= target) {
    10. // 只要还没增长到target,就继续进行4次遍历
    11. // 注意边界是等于,因为我们的初始设定就是边界是可取的边界
    12. // 上方边界填满,上限++
    13. for (int i = leftMax; i <= rightMax; i++) matrix[upMax][i] = num++;
    14. upMax++;
    15. // 右方边界填满,右限--
    16. for (int i = upMax; i <= downMax; i++) matrix[i][rightMax] = num++;
    17. rightMax--;
    18. // 下方边界填满,下限--
    19. for (int i = rightMax; i >= leftMax; i--) matrix[downMax][i] = num++;
    20. downMax--;
    21. // 左方边界填满,左限++
    22. for (int i = downMax; i >= upMax; i--) matrix[i][leftMax] = num++;
    23. leftMax++;
    24. }
    25. return matrix;
    26. }