题解4| 豆包MarsCode AI刷题

106 阅读2分钟

问题描述

小U面临一个有趣的任务:在一个 𝑛×𝑛n×n 的方阵中填入 11 到 𝑛×𝑛n×n 这些数字,并要求按照蛇形顺序从右上角开始,沿着方阵的边界顺时针进行填充。蛇形填充的特殊排列方式使得每一层数字呈现出波浪形的排列方式。

例如,当 𝑛=4n=4 时,方阵应如下所示:

10 11 12  1
9 16 13  2
8 15 14  3
7  6  5  4

你需要编写程序输出填充后的方阵,确保格式的整齐性。 import java.util.Arrays;

public class Main { public static int[][] solution(int n) { int[][] matrix = new int[n][n]; int value = n * n; int row = 0, col = n - 1; boolean moveUp = false;

    while (value >= 1) {
        // Fill the top row from right to left
        while (col >= 0 && matrix[row][col] == 0) {
            matrix[row][col--] = value--;
        }
        col++;
        row++;

        // Fill the left column from top to bottom
        while (row < n && matrix[row][col] == 0) {
            matrix[row++][col] = value--;
        }
        row--;
        col--;

        // Fill the bottom row from left to right
        while (col >= 0 && matrix[row][col] == 0) {
            matrix[row][col++] = value--;
        }
        col--;
        row--;

        // Fill the right column from bottom to top
        while (row >= 0 && matrix[row][col] == 0) {
            matrix[row--][col] = value--;
        }
        row++;
        col++;
    }

    return matrix;
}

public static void main(String[] args) {
    int[][] a1 = solution(4);
    System.out.println(Arrays.deepEquals(a1, new int[][]{{10, 11, 12, 1}, {9, 16, 13, 2}, {8, 15, 14, 3}, {7, 6, 5, 4}}));

    int[][] a2 = solution(5);
    System.out.println(Arrays.deepEquals(a2, new int[][]{{13, 14, 15, 16, 1}, {12, 23, 24, 17, 2}, {11, 22, 25, 18, 3}, {10, 21, 20, 19, 4}, {9, 8, 7, 6, 5}}));

    int[][] a3 = solution(3);
    System.out.println(Arrays.deepEquals(a3, new int[][]{{7, 8, 1}, {6, 9, 2}, {5, 4, 3}}));
}

} 蛇形矩阵的填充算法可以通过以下步骤实现:

  1. 初始化一个n×n的矩阵,所有元素初始为0。
  2. 设置一个变量value,初始值为n*n,表示即将填充的数值。
  3. 使用两个变量rowcol来表示当前填充的位置,初始时设置在矩阵的右上角。
  4. 使用一个布尔变量moveUp来控制填充方向,初始为false,表示初始填充方向是从上到下。
  5. 通过循环填充矩阵,每次循环填充一行或一列,直到value减到1。
  6. 在每次填充后,根据当前填充方向和位置,更新rowcol的值,以及填充方向。这段代码将创建一个蛇形矩阵,并且按照题目要求的方式填充。在main方法中,我们通过Arrays.deepEquals方法来比较输出矩阵和预期矩阵是否相同,从而验证算法的正确性。