有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)正在旋转,但我正在尝试找出一种方法来旋转一个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];

共 (1) 个答案

  1. # 1 楼答案

    试试这个

    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]