(算法分析Week13)Combination Sum IV[Medium]
2017-12-01 23:43
369 查看
506. 377. Combination Sum IV[Medium]
题目来源Description
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 = 4 The 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.
Solution
动态规划,有点类似跳楼梯那道题,只不过跳楼梯规定了0或1,这里有vector中的数字供选取,其实思路还是一样的。dp[i]表示目标数为i的解的个数,从target-nums[i]到target只有一种途径,所以这种途径的可能是dp[target-nums[i]],
也就是:
dp[i]=Σdp[i-nums[k]] 0<=k<=nums.size()
当i-nums[k]等于0时,表示数组中有target,此时dp[i]为1
Complexity analysis
O(MN)M = target;
N = nums.size()
Code
class Solution { public: int combinationSum4(vector<int>& nums, int target) { int dp[target+1] = {0}; for (int i = 1; i <= target; i++) { for (int j = 0; j < nums.size(); j++) { if (i - nums[j] > 0) { dp[i] += dp[i - nums[j]]; } else if (i - nums[j] == 0) { dp[i] += 1; } } } return dp[target]; } };
Result
相关文章推荐
- (算法分析Week15)01Matrix[Medium]
- (算法分析Week18)Subsets[Medium]
- (算法分析Week1)Different Ways to Add Parentheses[Medium]
- Leetcode: 216. Combination Sum III(Week14, Medium)
- (算法分析Week15)2 Keys Keyboard[Medium]
- (算法分析Week15)Best Time to Buy and Sell Stock with Cooldown[Medium]
- Medium 377题 Combination Sum IV
- [LeetCode-Algorithms-39] "Combination Sum" (2017.11.29-WEEK13)
- (算法分析Week18)Gray Code[Medium]
- [LeetCode-Algorithms-40] "Combination Sum II" (2017.11.29-WEEK13)
- Week 13算法分析作业
- 算法分析与设计——LeetCode Problem.653 Two Sum IV - Input is a BST
- (算法分析Week13)Relative Ranks[Easy]
- LeetCode #377 - Combination Sum IV - Medium
- 算法分析与设计丨第十四周丨LeetCode(18)——Maximum Subarray(Medium)
- LeetCode[377] Combination Sum IV
- 算法分析与设计week09--53. Maximum Subarray
- 算法分析与设计week19--257. Binary Tree Paths
- Week 3算法分析作业
- Week 6算法分析作业