class Solution {
public:
int ret;//保存结果
int sum;//当前和
int findTargetSumWays(vector<int>& nums, int target) {
dfs(nums,target,0);
return ret;
}
//pos是标记值,代表递归深度,若值等于数组的长度就返回
void dfs(vector<int>& nums,int target,int pos)
{
if(pos==nums.size())
{
if(sum==target) ret++;
return ;
}
//选择+
sum+=nums[pos];
dfs(nums,target,pos+1);
sum-=nums[pos];//回溯
//选择-
sum-=nums[pos];
dfs(nums,target,pos+1);
sum+=nums[pos];//回溯
}
};
二叉树结构,深度搜素加回溯,要么选择+要么选择-,选择过后将sum值恢复到选择前即可。
欢迎大家在评论区交流讨论,批评指正!