日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字字符串转化为字母组合的种数

發布時間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字字符串转化为字母组合的种数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

  給定一個字符串str,str全部由數字字符組成,如果str中某一個或者某相鄰兩個字符組成的子串在1~26之間,則這個子串可以轉換為一個字母。規定“1”轉換為“A”,“2”轉換為“B”……“26”轉換為“Z”。求str有多少種不同的轉換結果。

舉例

  str = “1111”?
  能轉換成的結果有“AAAA”,“LAA”,“ALA”,“AAL”和“LL”,返回5。?
  str = “01”,“0”沒有對應的字母,返回0。

基本思路
1.暴力遞歸的方法。定義遞歸函數p(i),p(i)表示只轉換字符串的i~N-1部分(N表示字符串的長度),一共有多少種轉換結果。接下來便可以進行遞歸求解:

如果i == N,p(N)表示沒有任何字符需要轉換,返回 1。

如果str[i] == ‘0’,因為以0開頭的子串都能進行轉換,所以返回 0。

如果不滿足條件1和2,說明此時str[i]在 ‘1’ 到 ‘9’ 之間,這個時候str[i]能轉換的種數至少包含p(i+1)。如果str[i]和str[i+1]的組合又在 ‘10’ 到 ‘26’ 之間,則str[i]能轉換的種數還要包含p(i+2),即p(i) = p(i+1) 或者p(i) = p(i+1) + p(i+2)。
2.動態規劃的方法。由上述可知,p(i)的值最多依賴于p(i+1)和p(i+2),即p(i) = p(i+1) (+ p(i+2)),這就是典型的斐波那契問題的變形題,只不過這里是從后往前計算而已。

"""暴力遞歸"""def num1(str1):if str1 == None or str1 == '':return 0return process(str1,0)def process(str1,i):if i == len(str1):return 1if str1[i] == '0':return 0res = process(str1,i+1)if i+1 < len(str1) and ((int(str1[i]))*10 + int(str1[i+1])< 27:res += process(str1,i+2)return res"""動態規劃"""def num2(str1):if str1 == None or str1 == '':return 0if str1[-1] != 0:cur = 1else:cur = 0next_ = 1for i in range(len(str1)-2,-1,-1):if str1[i] == '0':next_ = curcur = 0else:tmp = curif int(str1[i])*10 + int(str1[i+1])< 27:cur += next_next_ = tmpreturn cur


?

?

?

總結

以上是生活随笔為你收集整理的数字字符串转化为字母组合的种数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。