給定乙個平衡括號字串s
,按下述規則計算該字串的分數:
示例: 答案:
(()(())) 6思路分析:
一開始想把每種組合"()",")(","((","))"代表的運算子寫出來組成乙個算術表示式計算,結果試了多次還是不對.
只好按照括號直接開始計算.使用string表示會特別耗時,所以我用-1表示(,0表示),0和-1是一定不會在算式中出現的,所以可以用來區分正在計算的數字和原來的括號.<(~︶~)>非常高興通過了.
**:
public int scoreofparentheses(string s)
int last = -1;
for (int i = 0; i < chars.size();) else
last = a;
}len = chars.size();
if (len == 1)
if (len == 2)
while (chars.size() != 1) else if (last != 0 && last != -1 && a != 0 && a != -1)
} else if (chars.size() > i + 1) }}
}return chars.get(0);
}
**很好理解,
碰到()就置為1
判斷陣列長度是否為1,不為1則->3,為1則直接返回第乙個值
從i=0開始對當前陣列進行遍歷,如果陣列大小大於i+2,->4;如果陣列大小為i+1,->5.
當前數設為a後面乙個數設為last(之前想從後往前算的,就沒改名稱,湊合看看- -),a後面的後面的數設為llast,如果a =-1,llast = 0,中間的數字不等於0也不等於-1則對last×2放進a的位置,並且把a,last,llast都移除;如果a和last上的數字都不代表(),那麼就將兩數相加放進a的位置,並且移除a和last
如果last和a都不代表(),將兩數相加放進a的位置,並且移除a和last
**提交上去後,執行時間10ms,看了下5ms的範例.
發現他用的這個分別算()數量的想法我也有過 (`・ω・´),另外還用了遞迴演算法.演算法題果然還是越精簡越棒!
LeetCode 856 括號的分值
1 題目描述 給定乙個以括號組成的平衡字串表示式,基於如下規則計算括號表示式的分值。1 的分值為1 2 ab的分值為a b,其中a與b均是平衡字串 3 a 的分值為2 a,其中a是平衡字串。例子1 輸入 輸出 1 例子2 輸入 輸出 2 例子3 輸入 輸出 2 例子4 輸入 輸出 6 注 1 字串僅...
leetcode 856 括號的分數
給定乙個平衡括號字串s,按下述規則計算該字串的分數 示例 1 輸入 輸出 1示例 2 輸入 輸出 2示例 3 輸入 輸出 2示例 4 輸入 輸出 6 s是平衡括號字串,且只含有 和 2 s.length 50 很明顯,這一題可以用棧來解決。我們把單獨乙個左括號算作0分,遍歷字串s,遇到左括號就直接算...
leetcode 856 括號的分數
給定乙個平衡括號字串s,按下述規則計算該字串的分數 得 1 分。ab得a b分,其中 a 和 b 是平衡括號字串。a 得2 a分,其中 a 是平衡括號字串。示例 1 輸入 輸出 1示例 2 輸入 輸出 2示例 3 輸入 輸出 2示例 4 輸入 輸出 6 模擬棧,遍歷字串s,時入棧,不然出棧,若棧頂元...