leetcode 856 括號的分數詳解

2021-08-25 05:29:38 字數 1175 閱讀 9706

給定乙個平衡括號字串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,時入棧,不然出棧,若棧頂元...