一、题目
二、解题思路
参考了LeetCode的官方题解
根据栈后进先出的特性,位于栈顶上方的数总是最新的,我们每次取新的数做运算时,要和最新的结果做运算,也就是栈顶的数。
再考虑到乘除运算的优先级,我们可以在遇到
- 乘除符号时将它与栈顶的数做乘除运算,并将结果压入栈中;
- 加减符号时:如果是加号,直接将其压入栈中;如果是减号,将其相反数压入栈中;
这样在我们取完所有的数后,栈中所有的数只剩下加法运算。要得到最终的结果,只需将栈中的数全部相加即可。
三、参考代码
public static int clumsy(int N) {
Stack<Integer> s = new Stack<>();
// 开始的第一个数前面假设有加号
s.push(N);
N--;
// index用来记录当前运算符是1:‘*’、2:‘/’、3:‘+’或4:'-'
int index = 1;
while (N > 0) {
switch (index) {
case 1:
s.push(s.pop() * N);
index = 2;
break;
case 2:
s.push(s.pop() / N);
index = 3;
break;
case 3:
s.push(N);
index = 4;
break;
case 4:
s.push(-N);
index = 1;
break;
}
N--;
}
int res = 0;
while (!s.isEmpty()) {
res += s.pop();
}
return res;
}
四、参考资料
详情请见文中链接,如有侵权,请联系我删除,谢谢!
如有不当之处,还请大家指出。