From fec810214865a4da7766c58019f7d0d79cfde93a Mon Sep 17 00:00:00 2001 From: MaoLongLong <382084620@qq.com> Date: Fri, 30 Apr 2021 17:45:35 +0800 Subject: [PATCH] feat: add solutions to leetcode problem: No.0377. Combination Sum IV --- .../0377.Combination Sum IV/README.md | 27 +++++++++++++++-- .../0377.Combination Sum IV/README_EN.md | 27 +++++++++++++++-- .../0377.Combination Sum IV/Solution.java | 29 +++++-------------- .../0377.Combination Sum IV/Solution.py | 9 ++++++ 4 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 solution/0300-0399/0377.Combination Sum IV/Solution.py diff --git a/solution/0300-0399/0377.Combination Sum IV/README.md b/solution/0300-0399/0377.Combination Sum IV/README.md index 6c41bd0aead8b..6671c278bc8bd 100644 --- a/solution/0300-0399/0377.Combination Sum IV/README.md +++ b/solution/0300-0399/0377.Combination Sum IV/README.md @@ -56,6 +56,8 @@ +简单动态规划,`dp[i]` 表示总和为 `i` 的元素组合的个数。 + ### **Python3** @@ -63,7 +65,15 @@ ```python - +class Solution: + def combinationSum4(self, nums: List[int], target: int) -> int: + dp = [0 for i in range(target + 1)] + dp[0] = 1 + for i in range(1, target + 1): + for num in nums: + if i - num >= 0: + dp[i] += dp[i - num] + return dp[target] ``` ### **Java** @@ -71,7 +81,20 @@ ```java - +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) { + if (i - num >= 0) { + dp[i] += dp[i - num]; + } + } + } + return dp[target]; + } +} ``` ### **...** diff --git a/solution/0300-0399/0377.Combination Sum IV/README_EN.md b/solution/0300-0399/0377.Combination Sum IV/README_EN.md index 38483fa5db6b9..ff0c0d94c7eac 100644 --- a/solution/0300-0399/0377.Combination Sum IV/README_EN.md +++ b/solution/0300-0399/0377.Combination Sum IV/README_EN.md @@ -49,18 +49,41 @@ Note that different sequences are counted as different combinations. ## Solutions +`dp[i]` represents the number of element combinations whose sum is `i`. + ### **Python3** ```python - +class Solution: + def combinationSum4(self, nums: List[int], target: int) -> int: + dp = [0 for i in range(target + 1)] + dp[0] = 1 + for i in range(1, target + 1): + for num in nums: + if i - num >= 0: + dp[i] += dp[i - num] + return dp[target] ``` ### **Java** ```java - +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) { + if (i - num >= 0) { + dp[i] += dp[i - num]; + } + } + } + return dp[target]; + } +} ``` ### **...** diff --git a/solution/0300-0399/0377.Combination Sum IV/Solution.java b/solution/0300-0399/0377.Combination Sum IV/Solution.java index 4ce9c877ab042..0d7023486a2e1 100644 --- a/solution/0300-0399/0377.Combination Sum IV/Solution.java +++ b/solution/0300-0399/0377.Combination Sum IV/Solution.java @@ -1,27 +1,14 @@ class Solution { - public int combinationSum4(int[] n, int target) { + public int combinationSum4(int[] nums, int target) { int[] dp = new int[target + 1]; - Arrays.fill(dp, -1); dp[0] = 1; - return combinationSum4Dfs(n, dp, target); - - } - - private int combinationSum4Dfs(int[] n, int[] dp, int target) { - if (target < 0) { - return 0; - } - - if (dp[target] != -1) { - return dp[target]; - } - - int rt = 0; - for (int v : n) { - rt += combinationSum4Dfs(n, dp, target - v); + for (int i = 1; i <= target; i++) { + for (int num : nums) { + if (i - num >= 0) { + dp[i] += dp[i - num]; + } + } } - - dp[target] = rt; return dp[target]; } -} \ No newline at end of file +} diff --git a/solution/0300-0399/0377.Combination Sum IV/Solution.py b/solution/0300-0399/0377.Combination Sum IV/Solution.py new file mode 100644 index 0000000000000..48aba8d945d91 --- /dev/null +++ b/solution/0300-0399/0377.Combination Sum IV/Solution.py @@ -0,0 +1,9 @@ +class Solution: + def combinationSum4(self, nums: List[int], target: int) -> int: + dp = [0 for i in range(target + 1)] + dp[0] = 1 + for i in range(1, target + 1): + for num in nums: + if i - num >= 0: + dp[i] += dp[i - num] + return dp[target]