0 - > ''、1 - > 'B'、...、11 - > 'L' は、···、25 - > 'Z' は、翻訳の多数の異なる方法のどれだけが計算されます。
分析:ノートFは、[i]はi番目のビットとは異なる翻訳の数を表します。
数字はのために、10-25の間一緒に置く場合、F [i]は[I + 2] F。G F [I + 1] + G(I、I + 1)*を(I、I + 1)= 1、そうでなければ0。
1 INT GetTranslationCount(INTの数){ 2 であれば(数< 0 ){ 3 リターン 0 。 4 } 5 列 numberInstring = to_stringに(数) 6 リターンGetTranslationCount(numberInstring)。 7 } 8 9 INT GetTranslationCount(CONST 文字列&数){ 10 INT LEN = number.length()。 11 INT *数= 新しい int型[長さ]; 12 int型のカウント= 0 ; 13 のためには、(int型 I = LEN - 1 ; I> = 0 ; i-- ){ 14 カウント= 0 ; 15 もし(I <LEN - 1 ){ 16 カウントがカウント= [I + 1 ]。 17 } 他{ 18 カウント= 1 。 19 } 20 であれば(私は<LEN - 1 ){ 21 INT digit1 =番号[I] - ' 0" ; 22 INT digit2 =番号[iが+ 1 ] - ' 0 ' 。 23 INTは = digit1 *変換10 + digit2と、 24 であれば(変換> = 10変換&& <= 25 ){ 25 であれば(I <LEN - 2 ){ 26 カウントが+ =カウント[I + 2 ]。 27 } 他{ 28 カウント+ = 1 ; 29 } 30 } 31 } 32の カウント[I] = 数えます。 33 } 34 カウント=カウント[ 0 ]。 35 削除[]カウントを、 36 リターン数えます。 37 }