矩阵旋转

时间:2015-07-22 06:08:07

标签: java matrix

伙计们,我一直在分析以下关于矩阵旋转90度的代码:

static int[][] rotateCW(int[][] mat) {
    final int M = mat.length;
    final int N = mat[0].length;
    int[][] ret = new int[N][M];
    for (int r = 0; r < mat.length; r++) {
        for (int c = 0; c < mat[0].length; c++) {
            ret[c][mat.length-1-r] = mat[r][c];
        }
    }
    return ret;
}

代码工作正常。 我不明白为什么c < mat[0].length不应该是c < mat[i].length

4 个答案:

答案 0 :(得分:1)

矩阵对于所有行具有相同的长度(即每行中的列数相同),因此如果>>> f = open('myimage.jpg', 'rb')是矩阵,mat对于任何行都等于mat[0].lengthmat[i].lengthi的{​​{1}}。因此,如果您撰写0mat.length-1,则无关紧要。

答案 1 :(得分:1)

代码应为:

for (int r = 0; r < M; r++) {
    for (int c = 0; c < N; c++) {
        ret[c][M-1-r] = mat[r][c]; 
        ...

由于使用MN速度更快,因此可以节省存储访问的间接性。

另请注意:

final int M = mat.length; // number of rows
final int N = mat[0].length; // number of columns

因为任何matrix的任何行中的列数相等。

for for循环ret[c][mat.length-1-r]ret[c][M-1-r]是每行的 last-to-first 列,其中mat[r][c]每行的第一个到最后一个

答案 2 :(得分:0)

他们正在检查矩阵的长度。由于长度相同,解决方案是正确的。它当然不应该是c < mat[i].length,因为范围内不知道i,它应该(实际上)c < mat[0].length或更好:c < N

答案 3 :(得分:0)

mat[0].length representing the column length.