數字轉換成字串

2021-08-01 23:26:35 字數 1150 閱讀 8445

題目:給定乙個數字,按照如下規則把它轉化成字串: 0 翻譯成 a ,1 翻譯成 b ,2 翻譯成 c ,...... ,25 翻譯成 z 。 乙個數可能有多種翻譯,比如數字 11 可以翻譯成 bb 也可以翻譯成 l ;例如數字 12258 有5 中不同的翻譯 : bccfi 、bwfi 、bczi、mcfi 、mzi 這五種。

我們現在輸入 乙個數字,計算這個數字一共有多少不同的翻譯方法

思路:

一開始我也是懵逼的不知道如何下手,只能慢慢分析數字的特性。簡單分析,0~9 這十個數分別對應前面 十個 字母,而 10~25, 因為是兩位數,所以可以拆成兩個字元,也可以合成乙個字元,比如 11 可以是 bb 也可以是 l 。而當乙個數大於 25 的時候,因為沒有對應的字母,所以只能把它拆成當個的字母,這樣情況就比較明了。

我們從數字的低位(右邊)開始,以上面的 12258 為例:

第一位是 8 只能對應 字母 i , 第二個子數字 5 ,

因為 58 > 25 所以只能是 是 f i 來表示,

第三位 2 可以用 c 來表示

,因為右邊的5合起來是 25 可以用 z 表示也可以用 c f 表示,

所以這時候就有兩種表示的方法了。假如我們 用 z 來表示 25 ,那麼剩下的左邊兩位數字 是 12, 而且

第三位的 2

已經同第二位的 5合在一起用 z 來表示了,所以此時 的

2沒法跟右邊兩位合起來表示其他字母;

假如我們用 c f 表示 25 ,因為

2是單獨表示 c ,所以如果後面

的第二位的

2跟右邊剩餘的兩個數字 12 合在一起表示,並不影響前面的表示。

到這裡我們可以得出 推導公式 : f(12258) = f(122) + f(12) . 接下來就是具體的實現了:根據上面的分析,我們知道需要用到當前數字的右邊乙個數字來跟 25 比較, 若比 25 大則只有一種表示方法,比25小(包括25)則有兩種表示方法。分析到這已經很明顯了,我們需要記錄左邊一位數字,然後利用遞迴來求解,具體**:

private static int translation(int n) 

pre = cur;//將cur 賦給 pre,用以下次迴圈使用

}tp = tp/10;

} return 1;

}

js字串轉換成數字,數字轉換成字串

將字串轉換成數字,得用到parseint函式。parseint string 函式從string的開始解析,返回乙個整數。舉例 parseint 123 返回 123 int parseint 1234 返回 1234 int 如果解析不到數字,則將返回乙個nan的值,可以用isnan 函式來檢測 ...

js字串轉換成數字,數字轉換成字串

js字串轉換成數字 將字串轉換成數字,得用到parseint函式。parseint string 函式從string的開始解析,返回乙個整數。舉例 parseint 123 返回 123 int parseint 1234 返回 1234 int 如果解析不到數字,則將返回乙個nan的值,可以用is...

java 數字轉換成字串

各種數字型別轉換成字串型 string s string.valueof value 其中 value 為任意一種數字型別。字串型轉換成各種數字型別 string s 169 byte b byte.parsebyte s short t short.parseshort s int i integ...