[LeetCode] Expression Add Operators
This post shares a very nice solution, which is rewritten below.
1 class Solution { 2 public: 3 vector<string> addOperators(string num, int target) { 4 int n = num.length(); 5 if (!n) return {}; 6 vector<string> ans; 7 for (int i = 1; i <= n; i++) { 8 string s = num.substr(0, i); 9 long v = stol(s); 10 if (s != to_string(v)) continue; 11 add(ans, num, target, s, i, v, v, '$'); 12 } 13 return ans; 14 } 15 private: 16 void add(vector<string>& ans, string& num, int target, string s, int i, long v, long pv, char op) { 17 int n = num.length(); 18 if (i == n && v == target) 19 ans.push_back(s); 20 else { 21 for (int p = i + 1; p <= n; p++) { 22 string t = num.substr(i, p - i); 23 long d = stol(t); 24 if (t != to_string(d)) continue; 25 add(ans, num, target, s + '+' + t, p, v + d, d, '+'); 26 add(ans, num, target, s + '-' + t, p, v - d, d, '-'); 27 add(ans, num, target, s + '*' + t, p, (op == '+') ? v - pv + pv * d : ((op == '-') ? v + pv - pv * d: pv * d), pv * d, op); 28 } 29 } 30 } 31 };
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步