劍指 把數字翻譯成字串

2021-10-06 20:35:04 字數 1925 閱讀 7405

1,題目:

2,思路:

動態規劃:

dp[i]

=+xi 屬於[10,

25]dp[i−1

]10x

+xi 屬於[1,

10) 並上(25,

99]

方法一:字串遍歷(動態規劃)(從左向右遍歷):方法二:字串遍歷(動態規劃)(從左向右遍歷):此題的動態規劃計算是 對稱的 ,即 從左向右遍歷(從第 dp[2]計算至 dp[n]) 和 從右向左遍歷(從第 dp[n−2] 計算至 dp[0]),所得方案數一致。

方法三:深度優先搜尋:

3,**:

class

solution

組成的兩位數字可以被翻譯,則dp[i]=dp[i−1]+dp[i−2] ;否則 dp[i]=dp[i−1] 。

可被翻譯的兩位數區間:當 x = 0時,組成的兩位數是無法被翻譯的(例如 00,01,02,⋯ ),因此區間為 [10, 25][10,25] 。

dp[i]=+xi 屬於[10,25]

dp[i−1] 10x+xi 屬於[1,10) 並上(25,99]

3,初始狀態:dp[0]=dp[1]=1 ,即 「無數字」 和 「第 1位數字」 的翻譯方法數量均為 1;

4,返回值: dp[n],即此數字的翻譯方案數量。

*//*方法一:字串遍歷(動態規劃)(從左向右遍歷)

為方便獲取數字的各位 xi,考慮先將數字 num轉化為字串 s ,通過遍歷 s實現動態規劃。

通過字串切片 s[i−2:i] 獲取數字組合 10x+xi,通過對比字串 ascii 碼判斷字串對應的數字區間。

*/string s = string.

valueof

(num)

;int a =

1, b =1;

//這是初始化,因為剛開始的空格和乙個字元的肯定只有一種結果

for(

int i =

2; i <= s.

length()

; i++

)return a;

}}

方法二:字串遍歷(動態規劃)(從右向左遍歷)

/*

此題的動態規劃計算是 對稱的 ,即 從左向右遍歷(從第 dp[2]計算至 dp[n]) 和 從右向左遍歷(從第 dp[n−2] 計算至 dp[0]),所得方案數一致。

*/class

solution

return a;

}}

方法三:深度優先搜尋:

//深度優先搜尋

class

solution

dfs(str, n +1)

;if(str.

charat

(n)-

'0'>

0&& n +

1< str.

length()

&&(str.

charat

(n)-

'0')*10

+ str.

charat

(n +1)

-'0'

<26)

}public

inttranslatenum

(int num)

}

劍指 46 把數字翻譯成字串

題目描述 演算法分析 f r 表示以r為開始 r最小取0 到最右端所組成的數字能夠翻譯成字串的種數。對於長度為n的數字,f n 0,f n 1 1,求f 0 遞推公式為 f r 2 f r 1 g r 2,r 1 f r 其中,如果r 2,r 1能夠翻譯成字元,則g r 2,r 1 1,否則為0。因...

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

題目 給定乙個數字,按照如下規則翻譯成字串 0翻譯成 a 1翻譯成 b 25翻譯成 z 乙個數字有多種翻譯可能,例如12258一共有5種,分別是bccfi,bwfi,bczi,mcfi,mzi。實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。題目解析 這是一道典型的dp題目。1.分析其是否為d...

劍指 Offer把數字翻譯成字串

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