題目:
給定乙個數字,按照如下規則翻譯成字串:0翻譯成「a」,1翻譯成「b」…25翻譯成「z」。乙個數字有多種翻譯可能,例如12258一共有5種,分別是bccfi,bwfi,bczi,mcfi,mzi。實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。
題目解析:這是一道典型的dp題目。
1.分析其是否為dp問題。兩個條件:1.最優子結構;2.重複子問題。分析一下,以12258為例,將1和2258分離成兩部分,先翻譯1,在翻譯2258,明顯2258是在1的基礎上在進行翻譯,以此類推,滿足上述條件,為dp問題。
2.使用狀態轉移方程進行描述。分析一下,以12258為例,使用上面的方法進行分割,發現當前數字和前面數字相加大於25的時候,f(n)=f(n-1);函式f(n)表示n個字元的不同翻譯方法。另外一種情況稍微複雜一些,當前數字和前面數字相加小於25的時候,通過12258這個例子可能一下子看不出來,那麼我們在隨便舉個例子,12314,列舉一下,我們可以發現f(n)=f(n-1)+f(n-2)的。所以狀態轉換方程在兩種情況下分為兩個表示式。
3.選擇對應的資料結構去儲存或者表達這個狀態方程,因為這裡僅僅表示數字,所以我們可以選擇一維陣列進行表達。
4.有了資料結構表示的狀態方程,那麼我們需要進行乙個初始化,通過觀察發現f(n)=f(n-1)+f(n-2),是有兩個提前量的,所以我們需要初始化f(0)和f(1)。
最後編寫**:
class solution else
}return dp[strs.size()-1];
}};
劍指 把數字翻譯成字串
1,題目 2,思路 動態規劃 dp i xi 屬於 10,25 dp i 1 10x xi 屬於 1,10 並上 25,99 方法一 字串遍歷 動態規劃 從左向右遍歷 方法二 字串遍歷 動態規劃 從左向右遍歷 此題的動態規劃計算是 對稱的 即 從左向右遍歷 從第 dp 2 計算至 dp n 和 從右...
劍指 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把數字翻譯成字串
給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。示例 1 輸入 12258 輸出 5 解釋 12258有5種不同的翻譯,分別是 bccfi bwf...