博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode: Combination Sum IV && Summary: The Key to Solve DP
阅读量:5140 次
发布时间:2019-06-13

本文共 1836 字,大约阅读时间需要 6 分钟。

Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.Example:nums = [1, 2, 3]target = 4The possible combination ways are:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)Note that different sequences are counted as different combinations.Therefore the output is 7.Follow up:What if negative numbers are allowed in the given array?How does it change the problem?What limitation we need to add to the question to allow negative numbers?

DP 解法: the key to solve DP problem is to think about how to create overlap, how to re-solve subproblems(怎么制造复用)

Bottom up dp:

1 public class Solution { 2     public int combinationSum4(int[] nums, int target) { 3         if (nums==null || nums.length==0) return 0; 4         Arrays.sort(nums); 5         int[] dp = new int[target+1]; 6         dp[0] = 1; 7         for (int i=1; i<=target; i++) { 8             for (int j=0; j

Better Solution(Bottom-up)不sort也成:

1 public int combinationSum4(int[] nums, int target) { 2     int[] comb = new int[target + 1]; 3     comb[0] = 1; 4     for (int i = 1; i < comb.length; i++) { 5         for (int j = 0; j < nums.length; j++) { 6             if (i - nums[j] >= 0) { 7                 comb[i] += comb[i - nums[j]]; 8             } 9         }10     }11     return comb[target];12 }

 

 

Follow up:

I think if there are negative numbers in the array, we must add a requirement that each number is only used one time, or either positive number or negative number should be used only one time, otherwise there would be infinite possible combinations.

For example, we are given:
{1, -1}, target = 1,
it's obvious to see as long as we choose n 1s and (n-1) -1s, it always sums up to 1, n can be any value >= 1.

转载于:https://www.cnblogs.com/EdwardLiu/p/6108838.html

你可能感兴趣的文章
Node.js 连接 MySQL
查看>>
那些年,那些书
查看>>
注解小结
查看>>
java代码编译与C/C++代码编译的区别
查看>>
Bitmap 算法
查看>>
转载 C#文件中GetCommandLineArgs()
查看>>
list control控件的一些操作
查看>>
LVM快照(snapshot)备份
查看>>
绝望的第四周作业
查看>>
一月流水账
查看>>
npm 常用指令
查看>>
非常棒的Visual Studo调试插件:OzCode 2.0 下载地址
查看>>
判断字符串在字符串中
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
HashPump用法
查看>>
cuda基础
查看>>
Vue安装准备工作
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>