• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

xxxqqq

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

Backpack VI

Given an integer array nums with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target

Example

Given nums = [1, 2, 4], target = 4

The possible combination ways are:
[1, 1, 1, 1]
[1, 1, 2]
[1, 2, 1]
[2, 1, 1]
[2, 2]
[4]

return 6

一开始用backtracking 发现总是超时,后来网上找到的DP解法 简单有效。。类似于找钱(coin change)的问题

 1 public class Solution {
 2     /**
 3      * @param nums an integer array and all positive numbers, no duplicates
 4      * @param target an integer
 5      * @return an integer
 6      */
 7     public int backPackVI(int[] nums, int target) {
 8         // Write your code here
 9         int[] count = new int[target+1];
10         count[0] = 1;
11         
12         for(int i=1;i<=target;i++){
13             for(int j=0;j<nums.length;j++){
14                 if(i-nums[j]>=0){
15                     count[i]+=count[i-nums[j]];
16                 }
17             }
18         }
19         return count[target];
20     }
21 }

 

posted on 2017-05-10 15:05  xxxqqq  阅读(143)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3