java中的螺旋矩阵

时间:2018-04-30 10:43:41

标签: java

我正在尝试根据用户输入创建矩阵。我想按照下面的说明开始这个

输入:3

输出:创建3x3矩阵,如下所示,从1开始,然后是2,并添加前两个数字。

3   2    1
5   55   34  
8   13   21

如果用户输入为4,那么它应该创建一个4x4矩阵。

3 个答案:

答案 0 :(得分:1)

是的,在Java中很有可能。

答案 1 :(得分:1)

试试这个。

static int[][] DIRS = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}};

static boolean canGo(int[][] a, int n, int r, int c) {
    if (r < 0 || r >= n)
        return false;
    if (c < 0 || c >= n)
        return false;
    if (a[r][c] > 0)
        return false;
    return true;
}

static int[][] solve(int n) {
    int max = n * n;
    int[][] array = new int[n][n];
    int dir = 0, prev = 1, cur = 1;
    int row = 0, col = n - 1;
    for (int i = 1; i <= max; ++i) {
        array[row][col] = cur;
        if (!canGo(array, n, row + DIRS[dir][0], col + DIRS[dir][1]))
            dir = (dir + 1) % DIRS.length;
        row += DIRS[dir][0];
        col += DIRS[dir][1];
        int temp = cur;
        cur = prev + cur;
        prev = temp;
    }
    return array;
}

int[][] a = solve(3);
for (int[] row : a)
    System.out.println(Arrays.toString(row));

结果:

[3, 2, 1]
[5, 55, 34]
[8, 13, 21]

答案 2 :(得分:1)

如果我写下代码并交给你,那将不符合SE的精神。所以,让我以你应该思考的方式指导你。

  • 尝试以O(n)复杂度解决它。
  • 也许从一个从1到nxn
  • 的循环开始
  • 对于每次迭代,通过添加前两个数字来获得总和。
  • 对于每次迭代,使用i。
  • 获取2D数组的x和y索引
  • 像x = f1(i),y = f2(i)[这将是棘手的部分]
  • 指定[x] [y] =总和。

同样,这不是一个解决方案,而是一种你应该思考的可能方式。