856 括号的分数
https://leetcode-cn.com/problems/score-of-parentheses/
用栈的思想来做,还是非常快的,思想是这样的,你根据题目的意思每次都算出一个结果,然后压入栈,这样栈里就有了2种情况的字符串,“(”、数字的结果;注意,我们不会吧“)”压入栈的,因为直接计算数据结果就好那么你就可以根据这2种情况进行编程了:
- 判断在字符串里的是不是右括号“(”,如果是右括号,那么就直接压入栈
- 如果是左括号“)”,那么你就需要,判断栈顶的元素是什么。(1) 如果是“(”,那么你就弹出它,然后压入“1”;(2)如果是数字的话,那么你就做把数字弹出,乘以2,然后再压入。
- 这步最关键,如果栈里面的元素有多个数字的情况,那么你就需要吧这几个数字进行相加,然后再压入栈。
- 最后的结果就是栈里面只剩下了一个数字。那就是你想要的结果了!!!
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());
}