2266. 統計打字方案數

WrRan發表於2024-09-13
題目連結 2266. 統計打字方案數
思路 動態規劃-“爬樓梯”變體
題解連結 分組 + 線性 DP + 乘法原理(Python/Go/C++/Java)
關鍵點 1. 預處理類“斐波拉契陣列” 2. 區分“79”及其他數字
時間複雜度 \(O(n)\)
空間複雜度 \(O(1)\)

程式碼實現:

MOD = 1_000_000_007
f = [1, 1, 2, 4]
g = [1, 1, 2, 4]
for _ in range(10 ** 5 - 3):
    f.append((f[-1]+f[-2]+f[-3]) % MOD)
    g.append((g[-1]+g[-2]+g[-3]+g[-4]) % MOD)

class Solution:
    def countTexts(self, pressedKeys: str) -> int:
        answer = 1
        for ch, s in groupby(pressedKeys):
            m = len(list(s))
            answer = answer * (
                g[m] if ch in "79" else f[m]
            ) % MOD
        return answer

相關文章