前往
大廳
主題

LeetCode - 2232. Minimize Result by Adding Parentheses to Expression 解題心得

Not In My Back Yard | 2022-12-18 12:00:03 | 巴幣 100 | 人氣 155

題目連結:


題目意譯:
你被給定一個索引值從 0 開始的字串 expression,其格式為 "<num1>+<num2>",其中 <num1> 和 <num2> 各自代表著某正整數。

在 expression 中加上一對括號使得 expression 是一個合法的數學運算式並且其值盡可能地小。左括號必須加在 '+' 的左側而右括號必須加在 '+' 的右側。

回傳加入一對括號後的 expression,其滿足 expression 之值將是最小可能的值。如果有多個答案可以得到相同的結果,則回傳任一一個即可。

輸入之生成滿足 expression 的原始值以及在 expression 加入任何合法的括號之後得到的結果值都可以容納進一個 32 位元有號整數。

限制:
3 ≦ expression.length ≦ 10
expression 由 '1' 到 '9' 的數字以及 '+' 所組成。
expression 的開始與結尾都是數字。
expression 只包含恰好一個 '+'。
expression 的原始值以及在 expression 加入任何合法的括號之後得到的結果值都可以容納進一個 32 位元有號整數。



範例測資:
範例 1:
輸入: expression = "247+38"
輸出: "2(47+38)"
解釋: expression 之值為 2 × (47 + 38) = 2 × 85 = 170。
注意到 2(4)7+38 是不合法的,因為右括號應加在 '+' 的右側。
可以證明 170 是最小可能的數值。

範例 2:
輸入: expression = "12+34"
輸出: "1(2+3)4"
解釋: expression 之值為 1 × (2 + 3) × 4 = 1 × 5 × 4 = 20。

範例 3:
輸入: expression = "999+999"
輸出: "(999+999)"
解釋: expression 之值為 to 999 + 999 = 1998。


解題思維:
窮舉即可。

假設加號 '+' 在字串 expression 索引值 x(索引值從 0 開始)的地方,則左括號會有 x - 1 種放的方式(「-1」是因為放在第一個數字最左側沒有意義);而右括號則會有 expression.length - x - 2 種放的方式。

計算 expression 的數值時就可以將整個 expression 分成三部分:括號左側的數字、括號右側的數字以及括號中的運算式(如果 expression 沒有加括號而是原本的樣子的話,可以視為此部分),各個部分得出自己的數值之後相乘即可。然後取結果值最大的 expression 即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作