Skip to content

Latest commit

 

History

History
executable file
·
65 lines (56 loc) · 1.53 KB

377. Combination Sum IV.md

File metadata and controls

executable file
·
65 lines (56 loc) · 1.53 KB

377. Combination Sum IV

Question

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?

Solution:

  • Method 1: Search dfs TLE

    class Solution {
        private int res = 0;
        public int combinationSum4(int[] nums, int target) {
            dfs(nums, target, 0);
            return res;
        }
        private void dfs(int[] nums, int target, int temp){
            if(temp == target) res++;
            else if(temp < target){
                for(int i = 0; i < nums.length; i++){
                    dfs(nums, target, temp + nums[i]);
                }
            }
        }
    }
  • Method 1:DP AC 87.93%

    class Solution {
        public int combinationSum4(int[] nums, int target) {
            int[] dp = new int[target + 1];
            dp[0] = 1;
            for(int i = 1; i <= target; i++){
                for(int num : nums){
                    dp[i] += i - num >= 0 ? dp[i - num]: 0;
                }
            }
            return dp[target];
        }
    }