在java中只查找与特定值相加的子集

在java中只查找与特定值相加的子集,java,data-structures,treemap,Java,Data Structures,Treemap,我有一个树状图,其中我有键和它的所有值以及一个目标值。基本上就是找到一个子集。但在这里,我需要求和到目标的值的键。我已经做了一个递归方法。这里我想结束递归,如果我得到任何一个子集。有什么最佳的方法来解决这个问题吗?注意:-值将更大,我将有数百个数据 import java.util.*; public class SubsetFromATree { public static void main(String[] args) { TreeMap<Integer,In

我有一个树状图,其中我有键和它的所有值以及一个目标值。基本上就是找到一个子集。但在这里,我需要求和到目标的值的键。我已经做了一个递归方法。这里我想结束递归,如果我得到任何一个子集。有什么最佳的方法来解决这个问题吗?注意:-值将更大,我将有数百个数据

import java.util.*;
public class SubsetFromATree {
    public static void main(String[] args) {
        TreeMap<Integer,Integer> tm = new TreeMap<Integer,Integer>() ;
        tm.put(0, 3);
        tm.put(1, 4);
        tm.put(2, 5);
        tm.put(3, 6);
//      for(int i =0;i<20;i++) {
//          tm.put(i, i+1);
//      }
        ArrayList<Integer> ans = new ArrayList<>();
        ArrayList<Integer> out = new ArrayList<>();
        StringBuffer s = new StringBuffer("0");
        subset(tm,10,out,tm.size(),s,ans);
        System.out.println(ans);
    }

    private static void subset(TreeMap<Integer, Integer> tm, int tsum, ArrayList<Integer> out, int size, StringBuffer val,
            ArrayList<Integer> ans) {
        // TODO Auto-generated method stub
        if(tsum == 0) {
            val.append("1");
            for(int i = 0;i<out.size();i++) {
                ans.add(out.get(i));
            }
            return;
        }
        if(size == 0 || val.equals("1")) {
            return;
        }
        //Not including
        subset(tm,tsum,out,size-1,val,ans);
        ArrayList<Integer> output = new ArrayList<>(out);
        output.add(tm.get(size-1));
        subset(tm,tsum-tm.get(size-1),output,size-1,val,ans);
        return;
        
    }

}

import java.util.*;
公共类子流形树{
公共静态void main(字符串[]args){
TreeMap tm=新的TreeMap();
tm.put(0,3);
tm.put(1,4);
tm.put(2,5);
tm.put(3,6);

//为了(int i=0;没有有效的方法来解决这个问题;它是NP完全的,需要指数时间。有没有任何方法,如果我们达到目标和,从那里我们结束所有的递归?这当然是可行的,是的。例如,你可以返回一个
布尔值
,指示你是否找到了一个有效的解决方案,而不是hav正在调用
void
函数。为此,我尝试使用StringBuffer,以便如果val变为1,它将结束递归,但这不起作用。
val.equals(“1”)
将永远不会为真,因为
StringBuffer
不等于
String