題目:
? ? ? ? 給定一正整數數組 nums,nums中的相鄰整數將進行浮點除法。例如,[2,3.4]->2/3/4.
例如,nums =[2,3,4],我們將求表達式的值“2/3/4"。
? ? ? ?但是,你可以在任意位置添加任意數目的括號,來改變算數的優先級。你需要找出怎么添加括號,以便計算后的表達式的值為最大值。以字符串格式返回具有最大值的對應表達式。
? ? ? ?注意:你的表達式不應該包含多余的括號。
輸入:【1000,100,10,2】
輸出:”1000/(100/10/2)”
解法一:(復雜,不推薦)
暴力解法->遞歸->記憶化搜索->動態規劃
解法二:?
貪心策略:除了前兩個數以外,其余數全放在分子上即可。
public class Solution {public String optimalDivision(int[]nums){int n=nums.length;//獲取數組長度StringBuffer ret=new StringBuffer();//拼接結果字符串if(n==1)//如果只有·一個元素,直接返回該元素{return ret.append(nums[0]).toString();}if(n==2)//如果有2個元素,返回a/b{return ret.append(nums[0]).append("/").append(nums[1]).toString();}//當元素個數大于2時,構造a/(b/c/d...)形式最大化結果ret.append(nums[0]).append("/(").append(nums[1]);for(int i=2;i<n;i++)//從第三個元素開始循環添加{ret.append("/").append(nums[i]);}ret.append(")");return ret.toString();}public static void main(String[] args) {Solution solution=new Solution();int[]nums={1000,100,10,2};System.out.println(solution.optimalDivision(nums));}
}