矩阵操作(旋转/滚动)

时间:2015-03-11 11:43:46

标签: java matrix

我有这个3x3矩阵:

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

假设如果我发送两个参数m和n,则该矩阵必须移动m和n个位置(m为正/向右移动或向左移动)和(n为正向/向下移动或n向上向上移动)。对于样本,如果我发送m = 1,n = 0:

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

有没有某种方法可以做到这一点?或者只是“硬手工”?

1 个答案:

答案 0 :(得分:2)

如果您准备使用List<List<Integer>>代替int[][],则可以使用Collections.rotate(List list,int distance)

private void rotate(List<List<Integer>> matrix, int m, int n) {
    for (List<Integer> row : matrix) {
        Collections.rotate(row, m);
    }
    Collections.rotate(matrix, n);
}

public void test() {
    int[][] m = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    List<List<Integer>> matrix = new ArrayList<>();
    for (int[] r : m) {
        List<Integer> row = new ArrayList<>();
        for (int v : r) {
            row.add(v);
        }
        matrix.add(row);
    }
    System.out.println("Before: " + matrix);
    rotate(matrix, 1, 2);
    System.out.println("After: " + matrix);
}

打印:

  

之前:[[1,2,3],[4,5,6],[7,8,9]]

     

之后:[[3,1,2],[6,4,5],[9,7,8]]

与您的预期略有不同,但看起来很有意义。