来自递归回溯的子集和

时间:2013-09-04 05:18:44

标签: algorithm combinations subset subset-sum

我正在尝试修改“列出字符串中的所有组合”问题,以及我们需要打印具有给定“总和”的所有集合的问题。这是我的初始代码,但我不确定如何在代码中保存集合列表:

/**
 * method to return  all sets with a given sum.
 **/
public static List<List<Integer>> lists = new ArrayList<>();
public static List<Integer> list = new ArrayList<Integer>();
public static void countSubsetSum3(int arr[], int k, int sum) {
    if(sum == 0) {
        return;
    }
    if(sum != 0 && k == 0) {
        return;
    }
    if(sum < arr[k - 1]) {
        countSubsetSum3(arr, k-1, sum);
    }
    countSubsetSum3(arr, k-1, sum - arr[k-1]);
    countSubsetSum3(arr, k-1, sum);
}

我们如何修改此代码以使其打印所有可能具有总和'sum'的集合。谢谢!

1 个答案:

答案 0 :(得分:2)

string的长度为0时,您必须从函数返回。现在,您只需打印prefix,然后打印一行:

subset(prefix + string.charAt(0), string.substring(1));

已执行,因为您在空字符串上调用StringIndexOutOfBoundsException,所以会引发.substring(1)