class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @param target int整型 * @return string字符串vector */ //+ - * //cur 记录当前值, vector<string> addOpt(string num, int target) { // write code here int n=num.size(); vector<string> res; string s;//初始化第一个位置的值 s+=num[0]; int cur=num[0]-'0'; dfs(1,cur,target,num,s,res); return res; } void dfs(int j,int cur,int target,string num,string s,vector<string> &res){//注意res需要取地址 string temp=s; int temp2=cur; if(cur==target&&j==num.size()){ res.push_back(s); return; } if(j>num.size()){ return; } //每层递归循环测试+ - *三种可能性 for(int i=0;i<3;i++){ if(i==0){ s+='+'; cur=cur+int(num[j]-'0'); s+=num[j]; dfs(j+1,cur,target,num,s,res); //递归运行完后需要将参数调回来 s=temp; cur=temp2; } if(i==2){ s+='-'; cur=cur-int(num[j]-'0'); s+=num[j]; dfs(j+1,cur,target,num,s,res); s=temp; cur=temp2; } if(i==1){ s=s+'*'; cur=cur*int(num[j]-'0'); s+=num[j]; dfs(j+1,cur,target,num,s,res); s=temp; cur=temp2; } } } };