0字符串中等 LeetCode6038. 向表达式添加括号后的最小结果

6038. 向表达式添加括号后的最小结果

描述

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

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

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

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

分析

把整数切分成两份,一半做乘法,一半做加法,分割点就是圆括号要插入的地方。
边界处理当圆括号在左整数的最左边以及右边整数的最右边时,做乘法的另一半要设定为1。
注意:str[0].substring(0,0)和str[1].substring(str[1].length())的结果都是""。

class Solution {
    public String minimizeResult(String expression) {
        String[] str = expression.split("\\+");
        int left = 0, right = 0;
        int a = 0, b = 0, c = 0, d = 0;
        int min = Integer.MAX_VALUE;
        for(int i = 0; i < str[0].length(); i++){
            if(i == 0){
                a = 1;
                b = Integer.parseInt(str[0].substring(i));
            }else{
                a = Integer.parseInt(str[0].substring(0,i));
                b = Integer.parseInt(str[0].substring(i));
            }
            for(int j = 1; j <= str[1].length(); j++){
                if(j == str[1].length()){
                    c = Integer.parseInt(str[1]);
                    d = 1;
                }else{
                    c = Integer.parseInt(str[1].substring(0,j));
                    d = Integer.parseInt(str[1].substring(j));
                }
                if(a * (b + c) * d < min){
                    left = i;
                    right = j;
                    min = a * (b + c) * d;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        sb.append(str[0].substring(0,left)).append("(").append(str[0].substring(left)).append("+").append(str[1].substring(0,right)).append(")").append(str[1].substring(right));
        return sb.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值