[力扣周赛]6038. 向表达式添加括号后的最小结果

[力扣周赛]6038. 向表达式添加括号后的最小结果

给你一个下标从 0 开始的字符串 expression ,格式为 “+” ,其中 和 表示正整数。

请你向 expression 中添加一对括号,使得在添加之后, expression 仍然是一个有效的数学表达式,并且计算后可以得到 最小 可能值。左括号 必须 添加在 ‘+’ 的左侧,而右括号必须添加在 ‘+’ 的右侧。

返回添加一对括号后形成的表达式 expression ,且满足 expression 计算得到 最小 可能值。如果存在多个答案都能产生相同结果,返回任意一个答案。

生成的输入满足:expression 的原始值和添加满足要求的任一对括号之后 expression 的值,都符合 32-bit 带符号整数范围。

输入:

"247+38"
"12+34"
"999+999"

输出:

"2(47+38)"
"1(2+3)4"
"(999+999)"

主要思路:

设置两个下标zuo,you进行遍历寻找最小值,提取子字符串以后转化为int,注意下标计算。
另外的坑:注意int型的最大值可以写为0x7fffffff,一共7个f,或者写INT_MAX。网上的博主说是在在limits.h/climits中定义的。

题解:

class Solution {
public:
    string minimizeResult(string expression) {
        int min = 0x7fffffff, le = expression.size(), zuo = 0, you = le;
        int min_l = zuo, min_r = you;
        int pl = expression.find("+");
        while (zuo<pl ) {
            you = le;
            while (you > pl+1) {
                int cheng = 1, he = 0, re = 0x7ffffff;
                if (zuo > 0) cheng *= stoi(expression.substr(0, zuo));
                if (you < le) cheng *= stoi(expression.substr(you, le - you));
                he = 0+stoi(expression.substr(zuo, pl - zuo))+stoi(expression.substr(pl + 1, you - pl-1 ));
                re = cheng * he;
                if (re < min) {
                    min = re; min_l = zuo; min_r = you;
                }
                you--;
            }
            zuo++; 
        }
        string restr = expression;
        restr.insert(min_r, ")"); 
        restr.insert(min_l, "(");
        return restr;
    }
};


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值