241。加括號的不同方法
難度:中
主題:數學、字串、動態規劃、遞歸、記憶
給定數字和運算符的字串表達式,傳回計算對數字和運算子進行分組的所有不同可能方式的所有可能結果。您可以按任何順序回答案。
產生測試案例,使得輸出值適合 32 位元整數,且不同結果的數量不超過 104.
範例1:
((2-1)-1) = 0 (2-(1-1)) = 2
範例2:
(2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)) = -10 (((2*3)-4)*5) = 10
約束:
解:
我們可以使用遞歸結合記憶來儲存子表達式之前的計算結果,因為這樣可以避免冗餘計算並優化解決方案。
遞迴:
記憶:
基本案例:
對於輸入「2*3-4*5」:
讓我們用 PHP 實作這個解:241。加括號的不同方法
<?php class Solution { /** * @var array */ private $memo = []; /** * @param String $expression * @return Integer[] */ public function diffWaysToCompute($expression) { ... ... ... /** * go to ./solution.php */ } /** * @param $expression * @return array|mixed */ private function compute($expression) { ... ... ... /** * go to ./solution.php */ } } // Example usage $solution = new Solution(); $expression1 = "2-1-1"; $expression2 = "2*3-4*5"; print_r($solution->diffWaysToCompute($expression1)); // Output: [0, 2] print_r($solution->diffWaysToCompute($expression2)); // Output: [-34, -14, -10, -10, 10] ?>
這種方法可確保您透過利用記憶化來避免冗餘計算,從而有效地計算所有可能的結果。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是。添加括號的不同方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!