問題
数値を指定すると、次のルールに従って文字列に変換されます。0は「a」に変換され、1は「b」に変換され、...、11は「l」に変換され、...、25は「z」に変換されます。1つの番号に複数の翻訳がある場合があります。数がいくつの異なる翻訳方法を持っているかを計算する関数をプログラムしてください。
例1:
入力:12258
出力:5
説明:12258には、「bccfi」、「bwfi」、「bczi」、「mcfi」、「mzi」の5つの異なる翻訳があります。
アイデア
再帰的な知識を使用して解決します。
(1)最初に番号を取得し、番号文字列の長さを決定し、最初の番号がスタックにプッシュされ、次に番号がスタックにプッシュされるように、文字列の順序に従って順番に決定します。その中で、長さが1、長さが2、数が25以下の2つの判定結果があります。条件が満たされたら、すべての判断が終わるまで++を数えます。
(2)「int(a2 [0])!= 0」に注意してください。長さが2の場合、最初の数値を0にすることはできません。
コード
class Solution:
def translateNum(self, num):
self.count = 0
self.num = str(num)
self.fun(self.num)
return self.count
def fun(self, num):
if len(num) >= 1: #长度大于1
a1 = num[0]
b1 = num[1:]
if len(num[1:]) >= 2:
self.fun(b1)
else:
self.count += 1
if len(num) >= 2: #长度大于2
a2 = num[0:2]
b2 = num[2:]
if (int(a2) <= 25) & (int(a2[0]) != 0):
if len(num[2:]) >=2:
self.fun(b2)
else:
self.count += 1
if __name__ == '__main__':
s = Solution()
r = s.translateNum(11345)
print(r)
関連情報
スタック、再帰