856. 括号的分数

如果是(,就进栈,如果是),则不断出栈且将出栈的数相加,直到出现(,

如果出栈的数相加后为0,则将1进栈,否则将sum * 2进栈

[(]                # 遇到 ( 往栈添加
[(, (]             # 继续添加
[(, 1]             # 遇到 ) 合成一个1
[(, 1, (]          # 遇到 ( 往栈添加
[(, 1, (, (]       # 继续添加
[(, 1, (, 1]       # 遇到 ) 合成一个1
[(, 1, 2]          # 遇到 ) ,结构就是(1), 所以计算的话是 1 * 2
[6]                # 遇到 ) ,结构是(1,2), 所以计算的话是 (1 + 2) * 2

class Solution {
public:
    stack<int> st;
    int scoreOfParentheses(string s) {
        int len = s.length();
        for(int i = 0; i < len; i++)
        {
            if(s[i] == '(') st.push(0);
            else
            {
                int sum = 0;
                while(st.top() != 0)
                {
                    sum += st.top();
                    st.pop();
                }
                st.pop();
                if(sum == 0)
                    st.push(1);
                else
                    st.push(sum * 2);
            }

        }
        int ret = 0;
        while(!st.empty())
        {
            ret += st.top();
            st.pop();
        }
        return ret;


    }
};

 

posted @ 2021-10-31 16:16  WTSRUVF  阅读(25)  评论(0)    收藏  举报