首页 > 代码库 > 【LeetCode】282. Expression Add Operators
【LeetCode】282. Expression Add Operators
题目:
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 -> []
题解:
想了半个小时还是想不出来,卡在乘上了,看了别人的代码,感觉这个处理很巧妙,基本思路和回溯递归差不多
Soution 1 ()
class Solution { public: void helper(string num, vector<string>& res, string s, int target, int pos, long cur, long pre) { if(pos == num.size()) { if(cur == target) res.push_back(s); return; } for(int i=pos; i<num.size(); i++) { //首字符为0且长度大于1,那么这个字符串不能代表数字 if(num[pos] == ‘0‘ && i>pos) break; string str = num.substr(pos, i-pos+1); long val = stol(str); if(pos == 0) helper(num, res, s+str, target, i+1, val, val); else { helper(num, res, s+‘+‘+str, target, i+1, cur+val, val); helper(num, res, s+‘-‘+str, target, i+1, cur-val, -val); helper(num, res, s+‘*‘+str, target, i+1, cur-pre+pre*val, pre*val); } } } vector<string> addOperators(string num, int target) { vector<string> res; if(num.size() == 0) return res; helper(num, res, "", target, 0, 0, 0); return res; } };
【LeetCode】282. Expression Add Operators
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。