數組能否累加至某個數

  • 問題描述

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