leetcode6038. 向表达式添加括号后的最小结果(中等,周赛)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路简单,主要是代码不太好写
注意的点
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值