首页 > 解决方案 > 在 Java 中旋转 N * M 矩阵

问题描述

我正在尝试将字符网格顺时针旋转 90°。下面是一个例子:

[1, 2, 3],       [7, 4, 1],
[4, 5, 6],  -->  [8, 5, 2],
[7, 8, 9];       [9, 6, 3];

虽然上面的示例显示了一个 3 * 3 网格 (n * n) 正在旋转,但我正在尝试找出一种旋转 * m 网格的方法,例如 6 * 5。我无法弄清楚我自己的或在网上找到任何资源。

期望的结果:

[1, 2, 3, 4],       [9, 5, 1],
[5, 6, 7, 8],  -->  [0, 6, 2],
[9, 0, 1, 2];       [1, 7, 3],
                    [2, 8, 4];

标签: javaarraysmatrixrotation

解决方案


尝试这个。

static int[][] rotate90(int[][] m) {
    int rows = m.length, cols = m[0].length;
    int[][] n = new int[cols][rows];
    for (int r = 0, cc = rows - 1; r < rows; ++r, --cc)
        for (int c = 0, rr = 0; c < cols; ++c, ++rr)
            n[rr][cc] = m[r][c];
    return n;
}

public static void main(String args[]) {
    int[][] input = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 0, 1, 2},
    };
    int[][] rotated = rotate90(input);
    for (int[] row : rotated)
        System.out.println(Arrays.toString(row));
}

输出:

[9, 5, 1]
[0, 6, 2]
[1, 7, 3]
[2, 8, 4]

推荐阅读