标签:ase analysis different group bsp for mem http numbers
Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +
, -
and *
.
Example 1:
Input:"2-1-1"
Output:[0, 2]
Explanation: ((2-1)-1) = 0 (2-(1-1)) = 2
Example 2:
Input:"2*3-4*5"
Output:[-34, -14, -10, -10, 10]
Explanation: (2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)) = -10 (((2*3)-4)*5) = 10
Approach #1:
namespace studycat { int add(int x, int y) { return x + y; } int sub(int x, int y) { return x - y; } int mul(int x, int y) { return x * y; } } class Solution { public: vector<int> diffWaysToCompute(string input) { return helper(input); } private: unordered_map<string, vector<int>> memo; const vector<int>& helper(const string& input) { if (memo.count(input)) return memo[input]; vector<int> ans; for (int i = 0; i < input.length(); ++i) { char op = input[i]; if (op == ‘+‘ || op == ‘-‘ || op == ‘*‘) { const string left = input.substr(0, i); const string right = input.substr(i+1); const vector<int>& l = helper(left); const vector<int>& r = helper(right); std::function<int(int, int)> f; switch(op) { case ‘+‘: f = studycat::add; break; case ‘-‘: f = studycat::sub; break; case ‘*‘: f = studycat::mul; break; } for (int i : l) for (int j : r) ans.push_back(f(i, j)); } } if (ans.empty()) ans.push_back(std::stoi(input)); memo[input].swap(ans); return memo[input]; } };
Analysis:
http://zxi.mytechroad.com/blog/leetcode/leetcode-241-different-ways-to-add-parentheses/
241. Different Ways to Add Parentheses
标签:ase analysis different group bsp for mem http numbers
原文地址:https://www.cnblogs.com/ruruozhenhao/p/10331475.html