云计算百科
云计算领域专业知识百科平台

螺旋矩阵Ⅱ

要求:

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

思路:

要生成一个 n×n 的螺旋矩阵,可以模拟顺时针填充的过程。定义四个边界:左边界 left、右边界 right、上边界 top、下边界 bottom。然后按照从左到右、从上到下、从右到左、从下到上的顺序依次填充数字,每填完一条边就收缩对应的边界,直到所有数字填满。

算法步骤

  • 初始化一个 n×n 的二维数组 nums,以及四个边界变量。
  • 从数字 1 开始填充,直到 num 超过 n²。
  • 每一轮循环执行四次填充:
    • 从左到右填充上边(行 top,列从 left 到 right),然后 top++。
    • 从上到下填充右边(列 right,行从 top 到 bottom),然后 right–。
    • 从右到左填充下边(行 bottom,列从 right 到 left),然后 bottom–。
    • 从下到上填充左边(列 left,行从 bottom 到 top),然后 left++。
  • 返回 nums。
  • 题解:

    public int[][] generateMatrix(int n) {
    int[][] nums = new int[n][n];
    int num = 1;
    int top = 0;
    int left = 0;
    int right = n 1;
    int bottom = n 1;

    while (num <= n * n) {
    // 从左到右填充上边
    for (int i = left; i <= right; i++) {
    nums[top][i] = num++;
    }
    top++; // 上边界下移

    // 从上到下填充右边
    for (int i = top; i <= bottom; i++) {
    nums[i][right] = num++;
    }
    right; // 右边界左移

    // 从右到左填充下边
    for (int i = right; i >= left; i) {
    nums[bottom][i] = num++;
    }
    bottom; // 下边界上移(修正点1)

    // 从下到上填充左边
    for (int i = bottom; i >= top; i) {
    nums[i][left] = num++; // 修正点2:正确索引为 nums[i][left] }
    left++; // 左边界右移
    }
    return nums;
    }

    注意!

    本题一定要注意对边界条件的处理,本例的4个指针都为有效索引(左闭右闭),因此整个过程的for循环中两个边界都要赋值

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 螺旋矩阵Ⅱ
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!