題目描述:
給定乙個數字,我們按照如下規則把它翻譯為字串:0 翻譯成 「a」 ,1 翻譯成 「b」,……,11 翻譯成 「l」,……,25 翻譯成 「z」。乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。
示例 1:
輸入: 12258
輸出: 5
解釋: 12258有5種不同的翻譯,分別是"bccfi", 「bwfi」, 「bczi」, 「mcfi"和"mzi」
題目分析:和之前的打家劫舍有些相似。由於題目最大數字為25,是乙個兩位數,那麼將數字進行拆分求解組合時「
如果是一位數,沒有任何限制,但是如果是乙個兩位數,就需要判斷是否是乙個合法的數字,合法才能算為乙個方案,不難看出,合法的範圍為[10-25],此外,0x的形式也是不合法的。
我們用dp[i]表示到數字i為止的方案數目,如果i與i-1的組成的兩位數是合法的,方案累加,否則仍舊繼承i-1的方案數
}優化:一維的遞推陣列我們可以使用臨時變數的方法來進行空間優化
class
solution
return a;
}}
更進一步,我們還可以把字串s去掉,直接在num上進行處理,對某個數值要取得特定位數的數字,一般通過
對10的冪做整除與取餘運算
leetcode 面試題46把數字翻譯成字串
解題思路 動態規劃,1 得到num的每一位數字,從低位到高位用nums儲存 2 從低位到高位依次求解,狀態轉移方程如下 d p i dp i 1 dp i 2 10 leq nums i 10 nums i 1 26 dp i 1 others end right.dp i dp i 1 dp i ...
leetcode 面試題46 把數字翻譯成字串
題目鏈結 給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。class solution vector int nums while num int...
leetcode 面試題45 把陣列排成最小的數
解題思路 這道題的關鍵就在於如何重新定義排序規則,對待排序的字串x和y,如果 x y 構成的字串小於 y x 構成的字串,自然x應當排在y前面,反之亦然 class solution def minnumber self,nums list int str defcmp x,y if x y y x...