- 问题描述
给定一个数组arr和一个整数aim。如果可以任意选择arr中的数字,能否累加至aim,能则返回true,否则返回false。
- 解决方案(动态规划)
遍历数组,每到一个元素将原有的和加上该元素添加回HashMap,如果存在目标值,则返回true,否则返回false。代码如下:
import java.util.HashSet;
class Sum{
public static void main(String[] args){
int[] nums = {1,2,3,4,5,6,7,8};
System.out.println(canSum(nums,10));
System.out.println(canSum(nums,1));
System.out.println(canSum(nums,100));
}
public static boolean canSum(int[] nums,int aim){
if(nums == null || nums.length == 0)
return false;
HashSet<Integer> set = new HashSet<>();
set.add(nums[0]);
if(nums[0] == aim)
return true;
for(int i = 1;i < nums.length;i ++){
HashSet<Integer> help = new HashSet<>();
for(int temp : set){
help.add(temp + nums[i]);
}
for(int temp : help){
set.add(temp);
}
if(set.contains(aim))
return true;
}
return false;
}
}