思路简单,主要是代码不太好写。
注意的点:
1.不用把s按照‘+’分割成两个字符串来做,直接在s上遍历即可。
for (int i = 0; i < pos; ++i) { //i的下标小于pos
for (int j = pos + 1; j < n; ++j) { //j初始值为pos+1
}
2:写循环时,i和j要表示同一个含义(比如:不要一个下标 一个长度),在这里都表示下标。
i和j 表示下标的话substr也简单:n-i即i到末尾的长度
class Solution {
public:
string minimizeResult(string s) {
int pos = s.find('+'), n = s.size();
int _min = INT_MAX;
int flag = 0, flag2 = pos + 1;
//i和j都记录下标
for (int i = 0; i < pos; ++i) { //
for (int j = pos + 1; j < n; ++j) { //
string tmp = (i == 0) ? "1" : s.substr(0, i);
string tmp2 = s.substr(i, pos - i);
string tmp3 = s.substr(pos + 1,j - pos);
string tmp4 = (j == n - 1) ? "1" : s.substr(j + 1, n - j - 1);
int n1 = stoi(tmp);
int n2 = stoi(tmp2);
int n3 = stoi(tmp3);
int n4 = stoi(tmp4);
if (n1 * (n2 + n3) * n4 < _min) {
_min = n1 * (n2 + n3) * n4;
flag = i;
flag2 = j;
}
}
}
string ans;
for (int i = 0; i < n; ++i) {
if (i == flag) ans = ans + '(' + s[i];
else if (i == flag2) ans = ans + s[i] + ')';
else ans += s[i];
}
return ans;
}
};
细节:左边分割的数字(左括号右边-‘+’)即:s.substr(i, pos - i)
右边分割的数字(右括号左边->‘+’)即:s.substr(pos+1,j-pos)