【问题标题】:Friend array recursive朋友数组递归
【发布时间】:2016-11-15 18:21:14
【问题描述】:

我正在尝试递归地做朋友数组,如果arr1[i][j] = arr2[j][i],一个数组是另一个数组的朋友,所以我尝试递归地做,但我只更改第一行,另一个保持不变,我必须这样做它只有 1 个数组我的意思是我不能创建两个我猜必须在同一个数组上的更改,我这样做了:

int friendArray[][] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16}
};

friendArrayRecursive(friendArray, 0,0);


private static void friendArrayRecursive(int[][] arr, int row, int col){
    if(row < arr.length){
        if (col < arr[row].length) {
            arr[row][col] = arr[col][row];
            friendArrayRecursive(arr, row, col + 1);
        } else {
            friendArrayRecursive(arr, row + 1, 0);

        }
    }
}

但输出而不是:

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

1 5 9 13 
5 6 10 14 
9 10 11 15 
13 14 15 16

如何保存其他值以将 2 更改为 5 等...?

【问题讨论】:

    标签: java arrays recursion


    【解决方案1】:

    正如 nhouser9 所说,您需要使用临时变量来交换值。然后,当然,如果您遍历所有单元格,则交换将发生两次,因此将被取消。所以你只需要使用比较(col

    private static void friendArrayRecursive(int[][] arr, int row, int col){
        if(row < arr.length){
            if (col < row) {
                int temp = arr[row][col];
                arr[row][col] = arr[col][row];
                arr[col][row] = temp;
                friendArrayRecursive(arr, row, col + 1);
            } else {
                friendArrayRecursive(arr, row + 1, 0);    
            }
        }
    }
    

    【讨论】:

    • 你能解释一下为什么你把 col
    • 通过使用这种比较,算法会在 col
    • 我调试了它,最后它只加入了 else 语句,有那么好吗?还有其他方法吗?
    【解决方案2】:

    if 条件更改为

    if(row >= arr.length)
      return;
    if(col >= arr[row].length)
      return;
    if(row < col) {
        int temp;
        temp = arr[row][col];
        arr[row][col] = arr[col][row];
        arr[col][row] = temp;
        friendArrayRecursive(arr, row, col + 1);
     } else {
        friendArrayRecursive(arr, row + 1, 0);
     }
    

    【讨论】:

    • 假设条件
    • 你去@Stuart2041
    • 不,保持不变我可以将 2 更改为 5,但随后我会松开 2
    • 您只是将一个单元格复制到另一个单元格。你需要做的是交换
    • 试过了,但是当你做第 1 行时,他们会再次交换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2011-08-10
    • 1970-01-01
    • 2012-02-06
    • 2015-10-21
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多