You are given a 0-indexed string expression of the form
"<num1>+<num2>" where <num1> and <num2> represent positive integers.
Add a pair of parentheses to expression such that after the addition of parentheses, expression is a valid mathematical expression and evaluates to the smallest possible value. The left parenthesis must be added to the left of '+' and the right parenthesis must be added to the right of
'+'.
Return expressionafter adding a pair of parentheses such thatexpressionevaluates to thesmallest possible value. If there are multiple answers that yield the same result, return any of them.
The input has been generated such that the original value of expression, and the value of expression after adding any pair of parentheses that meets the requirements fits within a signed 32-bit integer.
Try all possible places to put the left and right parentheses around the ‘+’, and evaluate the resulting expression. The minimum value is achieved by the best split.
classSolution {
public: string minimizeResult(string expr) {
int plus = expr.find('+'), n = expr.size();
int minVal = INT_MAX;
string ans;
for (int l =0; l < plus; ++l) {
for (int r = plus +2; r <= n; ++r) {
int left = l ==0?1: stoi(expr.substr(0, l));
int inLeft = stoi(expr.substr(l, plus - l));
int inRight = stoi(expr.substr(plus +1, r - plus -1));
int right = r == n ?1: stoi(expr.substr(r));
int val = left * (inLeft + inRight) * right;
if (val < minVal) {
minVal = val;
ans = expr.substr(0, l) +"("+ expr.substr(l, plus - l) +"+"+ expr.substr(plus +1, r - plus -1) +")"+ expr.substr(r);
}
}
}
return ans;
}
};
classSolution {
public String minimizeResult(String expr) {
int plus = expr.indexOf('+'), n = expr.length();
int minVal = Integer.MAX_VALUE;
String ans ="";
for (int l = 0; l < plus; ++l) {
for (int r = plus + 2; r <= n; ++r) {
int left = l == 0 ? 1 : Integer.parseInt(expr.substring(0, l));
int inLeft = Integer.parseInt(expr.substring(l, plus));
int inRight = Integer.parseInt(expr.substring(plus + 1, r));
int right = r == n ? 1 : Integer.parseInt(expr.substring(r));
int val = left * (inLeft + inRight) * right;
if (val < minVal) {
minVal = val;
ans = expr.substring(0, l) +"("+ expr.substring(l, plus) +"+"+ expr.substring(plus + 1, r) +")"+ expr.substring(r);
}
}
}
return ans;
}
}
classSolution {
funminimizeResult(expr: String): String {
val plus = expr.indexOf('+')
val n = expr.length
var minVal = Int.MAX_VALUE
var ans = ""for (l in0 until plus) {
for (r in plus + 2..n) {
val left = if (l ==0) 1else expr.substring(0, l).toInt()
val inLeft = expr.substring(l, plus).toInt()
val inRight = expr.substring(plus + 1, r).toInt()
val right = if (r == n) 1else expr.substring(r).toInt()
val valRes = left * (inLeft + inRight) * right
if (valRes < minVal) {
minVal = valRes
ans = expr.substring(0, l) + "(" + expr.substring(l, plus) + "+" + expr.substring(plus + 1, r) + ")" + expr.substring(r)
}
}
}
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
defminimize_result(expression: str) -> str:
plus = expression.index('+')
n = len(expression)
min_val = float('inf')
ans =''for l in range(plus):
for r in range(plus+2, n+1):
left = int(expression[:l]) if l >0else1 in_left = int(expression[l:plus])
in_right = int(expression[plus+1:r])
right = int(expression[r:]) if r < n else1 val = left * (in_left + in_right) * right
if val < min_val:
min_val = val
ans = expression[:l] +'('+ expression[l:plus] +'+'+ expression[plus+1:r] +')'+ expression[r:]
return ans
impl Solution {
pubfnminimize_result(expr: String) -> String {
let plus = expr.find('+').unwrap();
let n = expr.len();
let bytes = expr.as_bytes();
letmut min_val =i32::MAX;
letmut ans = String::new();
for l in0..plus {
for r in plus+2..=n {
let left =if l ==0 { 1 } else { expr[..l].parse::<i32>().unwrap() };
let in_left = expr[l..plus].parse::<i32>().unwrap();
let in_right = expr[plus+1..r].parse::<i32>().unwrap();
let right =if r == n { 1 } else { expr[r..].parse::<i32>().unwrap() };
let val = left * (in_left + in_right) * right;
if val < min_val {
min_val = val;
ans =format!("{}({}+{}){}", &expr[..l], &expr[l..plus], &expr[plus+1..r], &expr[r..]);
}
}
}
ans
}
}