Optimal Division问题及解法
2017-08-22 17:04
537 查看
问题描述:
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.
示例:
Note:
The length of the input array is [1, 10].
Elements in the given array will be in range [2, 1000].
There is only one optimal division for each test case.
问题分析:
通过分析我们发现当nums总数大于3时,输出出来的string形式均为nums[0] / (nums[1] / nums[2] / ... / nums[n -1])。
过程详见代码:
class Solution {
public:
string optimalDivision(vector<int>& nums) {
string res = "";
int n = nums.size();
if (!n) return "";
if (n == 1) return to_string(nums[0]);
if (n == 2) return to_string(nums[0]) + "/" + to_string(nums[1]);
res = to_string(nums[0]) + "/(" + to_string(nums[1]);
for (int i = 2; i < n; i++)
{
res += "/";
res += to_string(nums[i]);
}
res += ")";
return res;
}
};
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.
示例:
Input: [1000,100,10,2] Output: "1000/(100/10/2)" Explanation: 1000/(100/10/2) = 1000/((100/10)/2) = 200 However, 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 = 50 1000/(100/(10/2)) = 50 1000/100/10/2 = 0.5 1000/100/(10/2) = 2
Note:
The length of the input array is [1, 10].
Elements in the given array will be in range [2, 1000].
There is only one optimal division for each test case.
问题分析:
通过分析我们发现当nums总数大于3时,输出出来的string形式均为nums[0] / (nums[1] / nums[2] / ... / nums[n -1])。
过程详见代码:
class Solution {
public:
string optimalDivision(vector<int>& nums) {
string res = "";
int n = nums.size();
if (!n) return "";
if (n == 1) return to_string(nums[0]);
if (n == 2) return to_string(nums[0]) + "/" + to_string(nums[1]);
res = to_string(nums[0]) + "/(" + to_string(nums[1]);
for (int i = 2; i < n; i++)
{
res += "/";
res += to_string(nums[i]);
}
res += ")";
return res;
}
};
相关文章推荐
- 约瑟夫问题的单向循环链表的解法
- Super Pow问题及解法
- Java源码-一筐鸡蛋问题的Java解法
- 约瑟夫问题解法
- 0-1背包问题动态规划解法
- 【BFS】由八数码问题的BFS解法引出的三种BFS经典状态判重方法
- N皇后问题的回溯解法
- 约束优化问题数值解法
- 促销中“满X优惠”问题的两种解法:动态规划和枚举法
- 八皇后问题的全排列解法
- Power of Four问题及解法
- 算法实践——Twitter算法面试题(积水问题)的线性时间解法
- 0-1背包问题的动态规划解法
- Flink开发中遇到的问题及解法
- 第十二周项目5迷宫问题之图深度优先遍历解法
- 数字问题之最大公约数问题全解法归纳<Java实现>
- Minimum Absolute Difference in BST问题及解法
- Unique Paths问题及解法
- 区块链落地中的九大问题与解法
- Unique Paths II问题及解法