劍指 Offer 46 把數字翻譯成字串

2021-10-07 17:14:04 字數 708 閱讀 5938

給定乙個數字,我們按照如下規則把它翻譯為字串:0 翻譯成 「a」 ,1 翻譯成 「b」,……,11 翻譯成 「l」,……,25 翻譯成 「z」。乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。

示例 1:

輸入: 12258

輸出: 5

解釋: 12258有5種不同的翻譯,分別是"bccfi", 「bwfi」, 「bczi」, "mcfi"和"mzi"

動態規劃問題,可以注意到10~25這些數字,都可以拆分或組合在一起進行翻譯。假設f(i)為以下標為i的數字結尾的總翻譯方法數。從前往後掃瞄數字,將當前數字與前乙個數字組合,共有以下兩種情況:

1、如果該組合數字小於10或者大於25,則無法組合翻譯,故只有一種翻譯方法,所以不產生新的翻譯

f(i) = f(i-1)

2、如果該組合數字在10到25之間,則可以組合翻譯,此時總的翻譯次數等於以i-2下標結尾的翻譯數,加上單獨翻譯的方法數,共有:

f(i) = f(i-1)+f(i-2)

注意到每一次計算時只與前兩個狀態有關,故可以用滾動陣列進行優化

class

solution

return res;

}}

迴圈次數為數字的位數,故時間複雜度o(logn)

再迴圈中有乙個字串臨時變數,故空間複雜度為o(logn)

劍指offer 46 把數字翻譯成字串

給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。示例 1 輸入 12258 輸出 5 解釋 12258有5種不同的翻譯,分別是 bccfi bwf...

劍指 Offer 46 把數字翻譯成字串

方法 演算法思想 動態規劃,到i的時候,區分最後兩位 是不是 10,25 最後一位 其他情況 時間複雜度 o n 空間複雜度 o n 邊界條件 兩位的時候,有兩種情況,所以dp 1 補充知識 class solution public int translatenum int num string ...

劍指 Offer 46 把數字翻譯成字串

劍指 offer 46.把數字翻譯成字串 給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。輸入 12258 輸出 5 解釋 12258有5種不同的...