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より大きいため、中央の数字がペアになることはありません。

lock icon提出時に隠しテスト+25件

challenge icon

発展問題

s に * も含まれる場合はどうでしょうか。これは 1 から 9 までの任意の数字を表します。O(n) 時間で読み取り数を数え、その数を 10^9+7 で割った余りを返せますか?

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

ケース1

ケース2

ケース3

入力

s = "2611"

期待値

4