↑看個小廣告,支持好內容↑
"C"
: 將前一局分數作廢"D"
: 將前一局分數乘以雙倍"+"
: 將前兩局分數相加
這三條規則有什麼共通點?它們都是從計分板的末端去取資料,我們至少得知道末兩項是什麼,分數才能往下更新:
// Case1: [3,1,D,+]
策略:先加上這局的分數,再去更新末兩項
3: sum=0+3=3, prev2=X, prev1=3
1: sum=3+1=4, prev2=3, prev1=1
D: sum=4+2=6, prev2=1, prev1=2 (D:前一局兩倍)
+: sum=6+3=9, prev2=2, prev1=3 (+:前兩局加總)
乍看之下可行,但萬一出現了 C
呢?末兩項也得跟著還原,可是變數已經更新,再往前的資料已無法溯回 ...
計分板的寫入和移除都是發生在資料的末端,是時候讓 Stack 登場了!
Stack 可以透過陣列的 push()
、pop()
來實現,照著規則建立計分板陣列,最後再將各局分數加總就可以了,再幫你複習一次迭代 XD
// acc:累積值、curr:陣列項
return arr.reduce((acc, curr)=>acc+curr, 0);
Array
、Stack
、Simulation
75.2%