蛇形填充n阶方阵

137 阅读1分钟

从右上角开始:

初始状态下,右上角(matrix[0][n-1])开始填充数字 1

上到下填充至最右列。

从上到下(最右列):

填充完成后,最右列减少,切换到最底行,开始从右到左。

从右到左(最底行):

到达底行后,从最右到最左填充。 填充完成后,底行减少。

从下到上(最左列):

最左列开始,从底向上填充,直到顶部。 填充完成后,最左列减少。

从左到右(顶行):

顶部继续由左到右填充。 填充完,顶行更新到下一行。然后重复上述操作,直到填满。

工作原理:

代码循环依次按照四种方向(上到下、右到左、下到上、左到右)填充值,形成螺旋序列,控制边界的 topbottomleftright 确保每个方向填充后,范围逐渐缩小。

关键逻辑:

动态调整边界

每次填充完一列或一行后,相应地调整边界变量(top, bottom, left, right)。 确保矩阵中的数字螺旋递增填充,最终数值遍布所有位置。

填充结束条件

num 超过 maxNumn * n),意味着所有元素都已填充。 `int[][] matrix = new int[n][n]; int top = 0, bottom = n - 1, left = 0, right = n - 1; int num = 1, maxNum = n * n;

    while (num <= maxNum) {
        // 从上到下
        for (int i = top; i <= bottom; i++) {
            matrix[i][right] = num++;
        }
        right--;

        // 从右到左
        for (int i = right; i >= left; i--) {
            matrix[bottom][i] = num++;
        }
        bottom--;

        // 从下到上
        for (int i = bottom; i >= top; i--) {
            matrix[i][left] = num++;
        }
        left++;

        // 从左到右
        for (int i = left; i <= right; i++) {
            matrix[top][i] = num++;
        }
        top++;
    }

    return matrix;`