提供-46を受賞

1 0-25 AZ

// 顔の質問46:デジタル文字列に変換
 // タイトル:数を考えると、私たちは、文字列を変換するために、次の規則に従ってください:0「A」を翻訳し、1ターン
 // 翻訳された「b」を、... ...、25が"Z"に翻訳、...、11が"L"に翻訳。デジタル変換よりもあるかもしれません。// 12258は"bccfi"、 "BWFI"、5つの異なる翻訳、持っている "bczi"、 "mcfi" // "MZIを。" 翻訳を持っている数を計算するために、多数の異なる方法のための機能をプログラミングしてください。

#include < ストリング > 
の#include <iostreamの> 使用して名前空間STD; int型 GetTranslationCount(CONST 文字列番号); INT GetTranslationCount(INT 数)
{ IF(数<

 

 


     

    ストリング to_stringに=(番号)numberInString; // 文字列に変換
    戻りGetTranslationCount(numberInStringを); 
} 

int型 GetTranslationCount(CONST  ストリングナンバー)
{ 
    int型の長さ= number.length();
     INT *カウント= 新しい新しい INT [長さ];
     INT = COUNT 0 ; 

    のためint型の長さ= I - 1。 ; Iは> = 0 ;株式会社(www.i-levelmedia.com))// 右再帰的に遭遇するサブ問題の重複を避けるために開始
    { 
        COUNT = 0 あれば(私は長さ< - 1 
            カウント =カウント[I + 1 ]。
        他の = 1 ; 

        あれば(私は長さ< - 1 
        { 
            int型 digit1 =番号[I] - ' 0 ' INT digit2 =番号[I + 1 ] - ' 0 ' int型は = digit1 *変換10 + digit2を。
            場合(の変換> = 10 &&に変換<= 25// 条件が満たされている、すべての可能なため、記録時間の現在位置が
            {
                 IF - (私は長さ< 2// ビットのダイナミックプログラミング手段 
                    COUNT + =カウント[I + 2 ;]
                 他の
                    COUNT + = 1 ; 
            } 
        } 

        カウント[I]を = COUNT; 
    } 

    COUNT =カウント[ 0 ]; //は、最初の値のカウントを返す
    []のカウントを削除、

    リターンCOUNT; 
}

 

おすすめ

転載: www.cnblogs.com/cgy1012/p/11401890.html