1006. Clumsy Factorial

仅供自己学习

思路:
因为这个是有一定规律的使用运算符,那么就存在一定周期,所以我们就可以考虑一个数conut通过模这个周期来判断此时可以用哪个运算符。又因为这是滞后计算,那么就用栈。
我们从N这个数往0减小,我们可以知道从第一个数 相乘到加上最后一个数,总共有4个数,那周期就为4.首先对于相乘的数,如果N=10,那么将10放入栈,然后N--为9,令count=0,此时0%4=0,这就是用乘法的条件,将N与栈顶元素相乘,然后N--为8,count++为1,1%4=1,此时栈顶元素除以N,然后2%4=2,就将N加入栈中.3%4=3作为加入-N的条件。可以把10-1的所有数列出来,然后按照这规律,会得到正确的结果。
按照上面的规律,最后栈里存放的就是所有乘除后得到的结果,接下来只需要把栈的元素全部取出来求和即可。
代码:

class Solution {
public:
    int clumsy(int N) {
        stack<int> st;
        st.push(N);
        N--;
        int count=0;
        while(N>0){
            if(count%4==0) st.top()*=N;
            else if(count%4==1) st.top()/=N;
            else if(count%4==2) st.push(N);
            else st.push(-N);
            N--;
            count++;
        }
        int res=0;
        while(!st.empty()){
            res+=st.top();
            st.pop();
        }
        return res;
    }
};
posted @ 2021-04-01 12:39  Mrsdwang  阅读(52)  评论(0编辑  收藏  举报