思路分析:
这道题看似需要很高的技术含量,其实一点都不难。我们首先需要明白,除法与除法的优先级相同,如果我们用括号将第一个元素与其他元素扩起来并不会影响结果。(比如(1000/100)/10/2、(1000/100/10)/2 、(1000/100/10/2)结果都与没有添加括号1000/100/10/2的结果相同)也就是说第一个元素直接和结果相关,并且不依赖括号。
而后面的元素可以看作为一个大元素。比如1000/(100/10)/2,这个表达式与1000 * 10/ 100 / 2结果相等,1000/(100/10/2),这个表达式与1000 * 10 * 2 / 100 结果相等。
这个规律说明我们应该将第一个元素之后的元素全部用括号括起来。
class Solution {
public String optimalDivision(int[] nums) {
if (nums.length==1)
return ""+nums[0];
else if(nums.length==2)
return ""+nums[0]+"/"+nums[1];
StringBuilder re=new StringBuilder();
re.append(String.valueOf(nums[0]));
re.append("/(");
for (int i=1;i<nums.length-1;i++){
re.append(String.valueOf(nums[i]));
re.append("/");
}
re.append(String.valueOf(nums[nums.length-1]));
re.append(")");
return re.toString();
}
}