#pragma once #include <vector> #include <string> using namespace std; class Solution { private: int res = 0; public: int findTargetSumWays(vector<int>& nums, int S) { recursion(nums, S, 0, 0, true); recursion(nums, S, 0, 0, false); return res; } //cur_S和index都是起记忆作用 void recursion(vector<int> & nums, int S, int cur_S,int index,bool is_pos) { if (is_pos) { cur_S += nums[index]; } else { cur_S -= nums[index]; } //到所有数都被添加到cur_S时进行判断 if (index == nums.size() - 1) { if (cur_S == S) { res++; } } //增加终结递归的条件 if (index < nums.size()-1) { recursion(nums, S, cur_S, index + 1, true); recursion(nums, S, cur_S, index + 1, false); } } }; 递归是非常慢的解法,因为时间是指数级的(2的n次方),考虑解法优化