数组能否累加至某个数

  • 问题描述

给定一个数组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;
    }
}
展开阅读全文
©️2020 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值