Given a string that contains only digits 0-9
and a target value, return all possibilities to add binary operators (not unary) +
, -
, or *
between the digits so they evaluate to the target value.
Examples:
"123", 6 -> ["1+2+3", "1*2*3"] "232", 8 -> ["2*3+2", "2+3*2"] "105", 5 -> ["1*0+5","10-5"] "00", 0 -> ["0+0", "0-0", "0*0"] "3456237490", 9191 -> []
Credits:
Special thanks to @davidtan1890 for adding this problem and creating all test cases.
给定一个由数字字符组成的字符串,在任意字符之间加入+、-、*构成数学表达式,使得表达式的结果为所给的target
AC代码:
class Solution { public: vector<string> addOperators(string num, int target) { vector<string> res; string temp=""; int len=num.size(); for(int i=1; i<=len; ++i) { string curString=num.substr(0,i); if(curString.size()>1&&curString[0]=='0') continue; string nextString=num.substr(i,len-i); long long curNum=stringToLonglong(curString); temp=""; cal(nextString,target,curNum,curNum,curString,res); } return res; } private: long long stringToLonglong(string s) { stringstream ss; ss<<s; long long res; ss>>res; return res; } void cal(string num,int target,long long last,long long cur,string temp,vector<string> &res) { int len=num.size(); if(len==0&&target==cur) { res.push_back(temp); return ; } for(int i=1; i<=len; ++i) { string curString=num.substr(0,i); string nextString=num.substr(i,len-i); if(curString.size()>1&&curString[0]=='0') return ; long long curNum=stringToLonglong(curString); cal(nextString,target,curNum,cur+curNum,temp+"+"+curString,res); cal(nextString,target,-curNum,cur-curNum,temp+"-"+curString,res); cal(nextString,target,last*curNum,cur-last+last*curNum,temp+"*"+curString,res); } } };
其他leetcode题目AC代码:https://github.com/PoughER