LeetCode 1006.笨阶乘


一、题目

1006. 笨阶乘


二、解题思路

参考了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;
    }

四、参考资料

详情请见文中链接,如有侵权,请联系我删除,谢谢!
如有不当之处,还请大家指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值