数组能否累加至某个数

  • 问题描述

给定一个数组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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章