LeetCode 856 括号的分数[栈] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 856 括号的分数[栈] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

解题思路

从模拟角度出发,整个操作就是入栈出栈的过程,由于有符号和数字的存在,并且数字一定大于零,所以不妨把左括号设为-1,遍历字符串,遇到左括号就入栈(即放入-1)。遇到右括号需要判断,如果栈顶是左括号,拿出左括号放入1,否则,先把栈顶的所有数字加起来,此时栈顶还有左括号的话,执行(A)操作,最后把栈内所有的数字加起来返回即可(括号一定都匹配完成了),代码如下:

代码

class Solution 
public:
    int scoreOfParentheses(string s) 
        stack<int> st;
        for(int i = 0; i < s.size(); i ++) 
            // 左括号入栈
            if(s[i] == '(') 
                st.push(-1);
             else // 右括号分情况判断
            // 如果栈顶是左括号,拿出左括号放入1
                if(st.top() == -1) 
                    st.pop();
                    st.push(1);
                 else // 把栈顶的所有数字加起来
                    int num = 0;
                    while(st.top() > 0 && !st.empty()) 
                        num += st.top();
                        st.pop();
                    
                    // 还有左括号执行(A)操作
                    if(!st.empty()) 
                        num *= 2;
                        st.pop();
                    
                    st.push(num);
                
            
        
        int sum = 0;
        while(!st.empty()) 
            sum += st.top();
            st.pop();
        
        return sum;
    
;

以上是关于LeetCode 856 括号的分数[栈] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 856 括号的分数[栈] HERODING的LeetCode之路

LeetCode 856 括号的分数[栈] HERODING的LeetCode之路

LeetCode 856. 括号的分数

LeetCode 算法 856. 括号的分数

LeetCode 870. 优势洗牌(根据数值对索引排序)/ 856. 括号的分数(栈) / 801. 使序列递增的最小交换次数(动态规划)

LeetCode 870. 优势洗牌(根据数值对索引排序)/ 856. 括号的分数(栈) / 801. 使序列递增的最小交换次数(动态规划)