如何在不多次访问元素的情况下迭代2D数组?

时间:2018-01-12 04:23:59

标签: arrays multidimensional-array 2d transpose in-place

我想使用2D数组转置方形矩阵。但是,当我使用嵌套for循环遍历数组时,元素被访问两次,导致不进行转置。

我想只访问每个数组元素一次来纠正这个问题。

如何更改当前代码才能执行此操作?

// transpose in-place
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            int temp = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = temp;
        }
    }

谢谢。

1 个答案:

答案 0 :(得分:1)

当j等于i时,将内循环条件更改为停止:

for (int j = 0; j < i; j++)

这样,您只迭代矩阵的三角形区域(由i = j定义的对角线一侧的值形成),并将每个值与对角线另一侧的相应值进行交换。