gpt4 book ai didi

java - 编辑递归算法: passing array instead of string as an argument to save results instead of printing

转载 作者:行者123 更新时间:2023-12-02 01:03:31 25 4
gpt4 key购买 nike

我有这段代码用于从长度为 k 的数组中查找 n 个组合:

class Util
{
// Function to print all distinct combinations of length k
public static void recur(int[] A, String out, int n, int k)
{
// invalid input
if (k > n) {
return;
}

// base case: combination size is k
if (k == 0) {
System.out.println(out);
return;
}

// start from next index till first index
for (int i = n - 1; i >= 0; i--)
{
// add current element A[i] to output and recur for next index
// (i-1) with one less element (k-1)
recur(A, (A[i]) + " " + out, i, k - 1);
}
}

public static void main(String[] args)
{
int[] A = {0, 1, 2, 3 };
int k = 2;
// process elements from right to left
recur(A, "", A.length, k);
}
}

它工作正常并且它的主要方法打印

2 3 
1 3
0 3
1 2
0 2
0 1

但是我想将这些组合保存在列表中:List<int[]>List<List<Integer>> 。我尝试编辑算法:

public static void recur(int[] A, List<Integer> out, int n, int k)
{
// invalid input
if (k > n) {
return;
}

// base case: combination size is k
if (k == 0) {
System.out.println(out);
return;
}

// start from next index till first index
for (int i = n - 1; i >= 0; i--)
{
out.add(A[i]);
// add current element A[i] to output and recur for next index
// (i-1) with one less element (k-1)
recur(A, out, i, k - 1);
}
}

但它没有按预期工作:它打印

[3, 2]
[3, 2, 1]
[3, 2, 1, 0]
[3, 2, 1, 0, 2, 1]
[3, 2, 1, 0, 2, 1, 0]
[3, 2, 1, 0, 2, 1, 0, 1, 0]

对于这个主要方法:

public static void main(String[] args)
{
int[] A = {0, 1, 2, 3 };
int k = 2;
recur(A, new ArrayList<>(), A.length, k);
}

最佳答案

第一个使用String ou的情况可以工作,因为String是不可变的,因此您可以在不损害原始字符串的情况下传递它。

使用 ArrayList 的第二种情况将不起作用,因为您传递了引用,并且当您修改“引用”的内容时,您也修改了原始内容。

关于java - 编辑递归算法: passing array instead of string as an argument to save results instead of printing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60342579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com