本文主要是介绍力扣856.括号的分数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
856.括号的分数
思路:
- 当遇到左括号时,0入栈
- 遇到右括号时,若栈顶为0,即栈顶为 左括号,弹出栈顶,1入栈;若栈顶不为0,则代表是(AB)情况,只需 使值相加 直至遇到栈顶为0,即为左括号
- 弹出此时栈顶的0,将 (相加的值*2) 入栈,因为是 (AB) 情况
- 此时栈中所有元素都是分数,全部求和即可
代码实现
class Solution {public int scoreOfParentheses(String s) {Stack<Integer> stack = new Stack<>();for(char c : s.toCharArray()) {if (c == '(') { //如果为左括号,则0进栈stack.push(0);} else {if (stack.peek() == 0) {// 此时匹配到右括号,若栈顶此时为0,即左右括号匹配成功,弹出栈顶, 1入栈stack.pop();stack.push(1);} else {int score = 0; //此时栈顶不为0,即是 (AB) 情况while (!stack.isEmpty() && stack.peek() != 0) {score += stack.pop(); //加上 A, B的值,当遇到0时,即左括号终止}stack.pop();//弹出栈顶0stack.push(score << 1);//将 (AB)中的值 *2}}}int sum = 0;while (!stack.isEmpty()) {sum += stack.pop(); //此时栈中所有的都是分数,加上即可}return sum;}
}
这篇关于力扣856.括号的分数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!