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

2021-10-23 17:03:16 字數 837 閱讀 2529

leetcode上的題目

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

示例 1:

輸入: 12258

輸出: 5

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

這一題是乙個數字序列的翻譯問題,由於可以按照序列乙個個數字進行翻譯,適合動態規劃的思路。

直接設狀態函式dp[

i]

dp[i]

dp[i

]為翻譯到第i個數碼時翻譯的總數。那麼根據題意,若前兩位數字大於10小於25,前兩位數字可以翻譯,此時翻譯的種類就是dp[i-2]加上dp[i-1]。之所以可以直接相加,是因為dp[i-2]和dp[i-1]長度不同導致翻譯的情況也不可能相同,不會出現重複的情況。將上述的思路,寫成狀態轉移方程有

d p[

i]

=dp[i-1]+dp[i-2] & & 10 \leq nums[i-1]nums[i]\leq25 \\ dp[i] & & else \end \right.

dp[i]=

string str=to_string(num);

int preres[2] = ;

int flagiminus2 = 0;

int flagiminus1 = 1;

if(str.length()==1)

for(int i=1;i=10&&inta<=25)

else}};

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

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

劍指 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 ...