大佬,牛!!!
- 题目:给定一个数组,他们会相除,但是我们可以加括号。要求使得最终的结果最大。例如:[1000,100,10,2],然后1000/(100/10)/2 = 50;1000/(100/(10/2)) = 50;1000/100/10/2 = 0.5;1000/100/(10/2) = 2等,我们需要的是1000/(100/10/2) = 200
- 思路:我先说一下我的思路,就是分子大,分母小。但是不知道怎么弄,而且动态规划,也不是很会。但是本题可以不用动态规划,并且动态规划时间复杂度还高。
- 大佬的思路:这里有个技巧就是值是2-1000之间的。然后配合我的思路,分子最大就是nums[0],因为接下来要背一个大于2的东西除,分子最小就是剩下的进行除,因为越除越小。
- 技巧:
- 主要是的数是有限制的。
伪代码
遍历数组进行拼接,返回的形式是nums[0]/(nums...)
java代码
class Solution {
public String optimalDivision(int[] nums) {
// 这个题目,直接就是nums[0]/(nums...)即可
int n = nums.length;
if (n == 1) {
return String.valueOf(nums[0]);
} else if (n == 2) {
return String.valueOf(nums[0]) + "/" + String.valueOf(nums[1]);
}
StringBuilder sb = new StringBuilder();
sb.append(nums[0]);
sb.append("/(");
sb.append(nums[1]);
for (int i = 2; i < n; i++) {
sb.append("/");
sb.append(nums[i]);
}
sb.append(")");
return sb.toString();
}
}
- 总结:看到数学的方法,恍然大明白啊,哎。附大佬链接。