文字列に変換安全オファーデジタルを証明するために、

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 }

 

おすすめ

転載: www.cnblogs.com/qinduanyinghua/p/11410080.html