Python 對一串數字字符串進行解碼

題目描述:‘1-26’對應着‘A-Z’,輸入一串數字,輸出最多有多少種解碼方式。

參考C++代碼:https://blog.csdn.net/LaoJiu_/article/details/50887487,編寫的python版本。

while True:
    N_str = input()
    if N_str=='quit':
        break
    else:
        n = len(N_str)
        max_len = [0]*(n+1)
        max_len[0] = 1
        max_len[1] = 1
        #max_len[i+1]即爲到包括i這一位的字符串最大的編碼方式
        if n>1:
            for i in range(n):
                if N_str[i]=='0':
                    max_len[i+1] = max_len[i-1]

                elif int(N_str[i])<=6:
                    if N_str[i-1]=='1' or N_str[i-1]=='2':
                            max_len[i+1]=max_len[i]
                            max_len[i+1]+=max_len[i-1]

                    else:
                        max_len[i+1]=max_len[i]

                else:
                    if N_str[i-1]=='1':
                        max_len[i+1]=max_len[i]
                        max_len[i+1]+=max_len[i-1]

                    else:
                        max_len[i+1]=max_len[i]

        ans = max_len[n]
        print(ans)

雖然借鑑的的是原博主的代碼,還是對某些地方有些疑問,所以按自己的想法進行了修改,比較關鍵的是

if N_str[i]=='0':
                    
    max_len[i+1] = max_len[i-1] #原代碼是i-2

當第i位字符爲'0'時,它必須與前面的數字綁定,不論是大於2還是小於等於2,只有一種編碼方式,那麼此時的編碼方式應該與前i-2位字符(包括第i-2位)的編碼方式數量相同,根據對應關係應該是max_len[i+1]= max_len[i-1]。

又通過代碼驗證,當輸入數字爲11060時,採用max_len[i+1]= max_len[i-1]得到結果爲1;而採用max_len[i+1]= max_len[i-2]得到結果爲2。按照本人對題意的理解,此時的編碼方式數量應該是1。故做了上述修改。

有不同的理解或者建議,歡迎評論,一起探討下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章