856 括号的分数 ——Java解法(栈的思想)

856 括号的分数
https://leetcode-cn.com/problems/score-of-parentheses/
在这里插入图片描述
用栈的思想来做,还是非常快的,思想是这样的,你根据题目的意思每次都算出一个结果,然后压入栈,这样栈里就有了2种情况的字符串,“(”、数字的结果;注意,我们不会吧“)”压入栈的,因为直接计算数据结果就好那么你就可以根据这2种情况进行编程了:

  1. 判断在字符串里的是不是右括号“(”,如果是右括号,那么就直接压入栈
  2. 如果是左括号“)”,那么你就需要,判断栈顶的元素是什么。(1) 如果是“(”,那么你就弹出它,然后压入“1”;(2)如果是数字的话,那么你就做把数字弹出,乘以2,然后再压入。
  3. 这步最关键,如果栈里面的元素有多个数字的情况,那么你就需要吧这几个数字进行相加,然后再压入栈。
  4. 最后的结果就是栈里面只剩下了一个数字。那就是你想要的结果了!!!
public int scoreOfParentheses(String S) {
    Stack<String> stack = new Stack<>();
    for (int i = 0, len = S.length(); i < len; ++i) {
        if ('(' == S.charAt(i)) {
            stack.push("(");
        } else {
            if ("(".equals(stack.peek())) {
                stack.pop();
                stack.push(1 + "");
//               数字
            } else {
                int intTemp = Integer.parseInt(stack.pop());
                if ("(".equals(stack.peek())) {
                    stack.pop();
                    stack.push( (intTemp * 2) + "");
                }
            }
//          如果栈里面的元素有多个数字的情况,那么你就需要吧这几个数字进行相加,然后再压入栈
            int tempAdd = 0;
            while (!stack.isEmpty() &&  !"(".equals(stack.peek())) {
                tempAdd += Integer.parseInt(stack.pop());
            }
            stack.push(tempAdd + "");
        }
    }
    return Integer.parseInt(stack.pop());
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值