LeetCode:553. Optimal Division

来源:互联网 发布:linux oracle服务重启 编辑:程序博客网 时间:2024/05/12 00:21

Given a list of positive integers, the adjacent integers will perform the float division. For example, [2,3,4] -> 2 / 3 / 4.

However, you can add any number of parenthesis at any position to change the priority of operations. You should find out how to add parenthesis to get the maximum result, and return the corresponding expression in string format. Your expression should NOT contain redundant parenthesis.

Example:

Input: [1000,100,10,2]Output: "1000/(100/10/2)"Explanation:1000/(100/10/2) = 1000/((100/10)/2) = 200However, the bold parenthesis in "1000/((100/10)/2)" are redundant, 
since they don't influence the operation priority. So you should return "1000/(100/10/2)". Other cases:1000/(100/10)/2 = 501000/(100/(10/2)) = 501000/100/10/2 = 0.51000/100/(10/2) = 2

Note:

  1. The length of the input array is [1, 10].
  2. Elements in the given array will be in range [2, 1000].
  3. There is only one optimal division for each test case
这道题给我的第一印象就是题目很长,可是仔细阅读就发现里面的规律,首先当只有一个数或者两个数的时候,这种情况很容易判断。而当有两个数以上(不包含两个数),那么就只有一种情况就是a/(b/c/d....),根据这个思路可以解决这道题。
AC:
class Solution {public:    string optimalDivision(vector<int>& nums) {        string res;        if (nums.size()==0)             return res;        res = to_string(nums[0]);        if(nums.size()==1)             return res;        if (nums.size()==2)            return res + "/"+to_string(nums[1]);        res +="/("+to_string(nums[1]);        for(int i =2;i<nums.size();i++)            res+="/" + to_string(nums[i]);        res+=")";        return res;    }};

原创粉丝点击