- 問題描述
給定一個數組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;
}
}