Combination Sum IV

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.

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?

Analyse: For every number i from 1 ... target, we check the numbers num in nums, if i >= num, we seperate i into num and i - num, and compute how many ways i - num are consisted. That is to say, dp[i] += dp[i - num].

Runtime: 4ms.

 1 class Solution {
 2 public:
 3     int combinationSum4(vector<int>& nums, int target) {
 4         vector<int> dp(target + 1, 0);
 5
 6         dp[0] = 1;
 7         for(int i = 1; i <= target; i++) {
 8             for(auto num : nums) {
 9                 if(i >= num)
10                     dp[i] += dp[i - num];
11             }
12         }
13         return dp[target];
14     }
15 };
时间: 2024-10-16 20:16:40

Combination Sum IV的相关文章

LC 377. Combination Sum IV

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,

Leetcode 377. Combination Sum IV

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,

Combination Sum IV -- LeetCode

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,

动态规划------Combination Sum IV

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,

377. Combination Sum IV 返回符合目标和的组数

[抄题]: 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

377. Combination Sum IV 70. Climbing Stairs

back function (return number) remember the structure class Solution { int res = 0; //List<List<Integer>> resList = new ArrayList<List<Integer>>(); public int combinationSum4(int[] nums, int target) { Arrays.sort(nums); return back(

leetcode377 Combination Sum IV

思路: dp. 实现: 1 class Solution 2 { 3 public: 4 int combinationSum4(vector<int>& nums, int target) 5 { 6 if (nums.empty()) return target == 0; 7 vector<int> dp(target + 1, 0); 8 dp[0] = 1; 9 vector<int> tmp(nums.begin(), nums.end()); 10

377. Combination Sum IV

是看到discuss里面的解法,因为用backtracking实在太多可能性了 思路是和https://leetcode.com/problems/climbing-stairs/ 在climbing stairs里面假如有n个台阶,每次可以跨一个台阶或者两个台阶,那么它的状态转移方程是res[i] = res[i - 1] + res[i - 2],初始化是res[0] = 1; res[1] = 1; 但是在本题中,每次不再只是可以跨一步或者两步了,每次可以跨nums数组里面的任意数字的步,

377. Combination Sum IV (DP)

1 class Solution { 2 public int combinationSum4(int[] nums, int target) { 3 int[] res = new int[target + 1]; 4 res[0] = 1; 5 for(int i = 1; i <= target; i++) { 6 for(int j = 0; j < nums.length; j++) { 7 if(nums[j] <= i && res[i - nums[j]]