Copy class Solution
{
public:
vector<int> compute(string s, unordered_map<string, vector<int>> &m)
{
vector<int> v;
if (m.find(s) != m.end())
{
return m[s];
}
for (int i = 0; i < s.length(); i++)
{
if (s[i] == '+' || s[i] == '-' || s[i] == '*')
{
string ls = s.substr(0, i);
string rs = s.substr(i + 1, s.length() - i + 1);
vector<int> la = compute(ls, m);
vector<int> ra = compute(rs, m);
for (int j = 0; j < la.size(); j++)
{
for (int k = 0; k < ra.size(); k++)
{
if (s[i] == '-')
{
v.push_back(la[j] - ra[k]);
}
if (s[i] == '+')
{
v.push_back(la[j] + ra[k]);
}
if (s[i] == '*')
{
v.push_back(la[j] * ra[k]);
}
}
}
}
}
if (v.size() == 0)
{
v.push_back(stoi(s));
}
m[s] = v;
return v;
}
vector<int> diffWaysToCompute(string s)
{
unordered_map<string, vector<int>> m;
vector<int> res = compute(s, m);
return res;
}
};