class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
}
};
377. 组合总和 Ⅳ
给你一个由 不同 整数组成的数组 nums
,和一个目标整数 target
。请你从 nums
中找出并返回总和为 target
的元素组合的个数。
题目数据保证答案符合 32 位整数范围。
示例 1:
输入:nums = [1,2,3], target = 4 输出:7 解释: 所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) 请注意,顺序不同的序列被视作不同的组合。
示例 2:
输入:nums = [9], target = 3 输出:0
提示:
1 <= nums.length <= 200
1 <= nums[i] <= 1000
nums
中的所有元素 互不相同1 <= target <= 1000
进阶:如果给定的数组中含有负数会发生什么?问题会产生何种变化?如果允许负数出现,需要向题目中添加哪些限制条件?
相似题目
原站题解
php 解法, 执行用时: 3 ms, 内存消耗: 20 MB, 提交时间: 2024-04-22 09:30:06
class Solution { /** * @param Integer[] $nums * @param Integer $target * @return Integer */ function combinationSum4($nums, $target) { $dp = array_fill(0, $target+1, 0); $dp[0] = 1; for ( $i = 1; $i <= $target; $i++ ) { foreach ( $nums as $num ) { if ( $i >= $num ) $dp[$i] += $dp[$i - $num]; } } return $dp[$target]; } }
cpp 解法, 执行用时: 1 ms, 内存消耗: 7.8 MB, 提交时间: 2024-04-22 09:27:44
class Solution { public: int combinationSum4(vector<int>& nums, int target) { // dp[x] 表示选取的元素之和等于 x 的方案数 // 初始化dp数组,大小为target+1,所有元素都设置为0,dp[0]设置为1 vector<int> dp(target + 1); dp[0] = 1; for (int i = 1; i <= target; ++i) { for (int& num : nums) { if (num <= i && dp[i - num] < INT_MAX - dp[i]) { // 累加dp[i - num]到dp[i] dp[i] += dp[i - num]; } } } return dp[target]; } };
rust 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2024-04-22 09:26:29
impl Solution { pub fn combination_sum4(nums: Vec<i32>, target: i32) -> i32 { let mut dp = vec![0; (target + 1) as usize]; dp[0] = 1; for i in 1..=target { for &num in &nums { if num <= i { dp[i as usize] += dp[(i - num) as usize]; } } } dp[target as usize] } }
java 解法, 执行用时: 1 ms, 内存消耗: 40 MB, 提交时间: 2024-04-22 09:23:57
class Solution { public int combinationSum4(int[] nums, int target) { // dp[x] 表示选取的元素之和等于 x 的方案数 int[] dp = new int[target + 1]; dp[0] = 1; // 初始化,和为0的方案只有一种,即不选任何数 for (int i = 1; i <= target; i++) { for (int num : nums) { if (num <= i) { dp[i] += dp[i - num]; } } } return dp[target]; } }
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2022-11-22 15:21:20
func combinationSum4(nums []int, target int) int { dp := make([]int, target+1) dp[0] = 1 for i := 1; i <= target; i++ { for _, num := range nums { if num <= i { dp[i] += dp[i-num] } } } return dp[target] }
python3 解法, 执行用时: 40 ms, 内存消耗: 15 MB, 提交时间: 2022-11-22 15:20:49
class Solution: def combinationSum4(self, nums: List[int], target: int) -> int: ''' dp[x] 表示选取的元素之和等于 x 的方案数 ''' dp = [1] + [0] * target for i in range(1, target + 1): for num in nums: if num <= i: dp[i] += dp[i - num] return dp[target]