mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-25 09:42:16 +08:00
Update
This commit is contained in:
32
problems/0494.目标和.md
Normal file
32
problems/0494.目标和.md
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
|
||||
// 这道题小细节很多
|
||||
// 感觉这道题可以用回溯法啊
|
||||
// 转为01 背包 思路不好想啊
|
||||
// dp数组难在如何初始化
|
||||
// dp 数组 通常比较长
|
||||
```
|
||||
class Solution {
|
||||
public:
|
||||
int findTargetSumWays(vector<int>& nums, int S) {
|
||||
int sum = 0;
|
||||
for (int i = 0; i < nums.size(); i++) sum += nums[i];
|
||||
if (S > sum) return 0; // 此时没有方案
|
||||
if ((S + sum) % 2) return 0; // 此时没有方案,两个int相加的时候要各位小心数值溢出的问题
|
||||
|
||||
int bagSize = (S + sum) / 2;
|
||||
int dp[1001] = {1};
|
||||
//for (int i = 0; i < nums.size(); i++) dp[nums[i]] = 1;
|
||||
for (int i = 0; i < nums.size(); i++) {
|
||||
for (int j = bagSize; j >= nums[i]; j--) {
|
||||
if (j - nums[i] >= 0) dp[j] += dp[j - nums[i]];
|
||||
}
|
||||
//for (int k = 0; k <= bagSize; k++) {
|
||||
// cout << dp[k] << " ";
|
||||
//}
|
||||
//cout << endl;
|
||||
}
|
||||
return dp[bagSize];
|
||||
}
|
||||
};
|
||||
```
|
Reference in New Issue
Block a user