Menu
CoddyTech

Decode Ways

ふつう動的計画法python iconjava iconcpp iconc iconjs icon+10

大文字のメッセージは、A = 1、B = 2、以下同様にZ = 26として符号化され、符号の間に区切りを入れずに書かれています。数字列sが与えられたとき、それを生成できるメッセージの数を返してください。

文字は1桁または隣り合う2桁から読み取り、符号が0で始まることはありません。06は6ではなく、単独の0も文字ではありません。読み取れる方法がない場合は、0を返してください。

関数

numDecodings(s: string) → integer
sstring
デコードする数字列
戻り値integer
s にエンコードされる文字メッセージの数

制約

  • 1 ≤ s.length ≤ 100
  • sには数字の0から9のみが含まれ、0で始まる場合があります。
  • s のすべての接頭辞と接尾辞の読み取り数は 231 未満なので、答えと計算途中で求めるすべての個数は符号付き32ビット整数に収まります。

例

入力
s = "2611"
出力
4
説明
4つの読み方は2 6 1 1(BFAA)、26 1 1(ZAA)、2 6 11(BFK)、26 11(ZK)です。61は26より大きいため、中央の数字が組み合わさることはありません。
challenge icon

発展問題

もしsが、1から9までの任意の数字を表す*も保持できるとしたらどうでしょうか?10^9+7を法として、O(n)時間で読み取り方の数を数えられますか?

コードをリセット
def numDecodings(s):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

s = "2611"

期待される出力

4