采用并查集的方式实现如下:
输入参数包括两部分,非负整数数组,所求和n,输出为boolean型,true表示存在,false表示不存在
代码如下
public static boolean ableSumTen(int[] nums,int sum) {
int[] result=new int[sum+1]; //result对应索引处又对影值,表示当前组合存在该数值的和
int[] result2=result.clone();//result结果集备份,用来存储更新后的结果集
int tmp;
for(int i=0;i<=sum;i++) {
tmp=nums[i]; //该轮循环的和最小值为tmp
if(tmp==sum) {
return true;
}
if(tmp<sum) { //如果tmp超出所求和,跳过该轮循环
int tmps=0;
result2[tmp]=tmp;
for(int j=0;j<=sum;j++) {
tmps=tmp+result[j];
if(tmps==sum) {
return true;
}
if(tmps<sum) {
result2[tmps]=tmps;
}
}
result=result2.clone();
}
}
return false;
}
具体参数含义如下:
sum