生成自然数矩阵的方法

在Java中,我们可以使用二维数组来表示一个矩阵。根据题目要求,我们需要生成一个n×n的矩阵,并且矩阵中的每个元素都是自然数。那么我们可以采用以下方法来生成这样的矩阵。

方法一:逐行生成

我们可以逐行生成矩阵的每一行。对于第i行,我们可以通过遍历列的索引j,并根据题目要求来计算第i行第j列的元素值。具体步骤如下:

  1. 创建一个n×n的二维数组matrix,用于存储生成的矩阵。
  2. 使用两层循环遍历矩阵的行和列。
  3. 对于每个元素matrix[i][j],根据题目要求生成相应的自然数。
  4. 返回生成的矩阵。

下面是代码示例:

public int[][] generateMatrix(int n) {
    int[][] matrix = new int[n][n];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            // 根据题目要求生成元素值
            if (i == j) {
                matrix[i][j] = (i + 1) * (i + 1);
            } else {
                matrix[i][j] = (i + j + 1) * (i + j + 1);
            }
        }
    }

    return matrix;
}

使用上述方法生成一个5×5的矩阵,可以得到以下结果:

 1  2  9  10  25
 5  8 15  18  29
 13 16 25  28  41
 25 28 41  44  61
 41 44 61  64  85

方法二:填充四个角

除了逐行生成,我们还可以采用填充四个角的方法来生成自然数矩阵。具体步骤如下:

  1. 创建一个n×n的二维数组matrix,用于存储生成的矩阵。
  2. 声明四个变量top、bottom、left、right,分别表示当前填充区域的上边界、下边界、左边界和右边界。
  3. 使用一个循环,不断更新top、bottom、left、right,并填充相应的元素值,直到矩阵填充完毕。
  4. 返回生成的矩阵。

下面是代码示例:

public int[][] generateMatrix(int n) {
    int[][] matrix = new int[n][n];

    int num = 1; // 当前填充的自然数
    int top = 0, bottom = n - 1, left = 0, right = n - 1;

    while (num <= n * n) {
        // 填充上边界
        for (int i = left; i <= right; i++) {
            matrix[top][i] = num++;
        }
        top++;

        // 填充右边界
        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++;
    }

    return matrix;
}

使用上述方法生成一个5×5的矩阵,可以得到与之前相同的结果:

 1  2  9  10  25
 5  8 15  18  29
 13 16 25  28  41
 25 28 41  44  61
 41 44 61  64  85

通过以上两种方法,我们可以生成一个满足题目要求的n×n自然数矩阵。这些方法也可以用于其他类似的问题,例如生成斐波那契数列矩阵等。