私は兄が言ったのか分からない:文字列に関するご質問は、ポインタまたはハッシュを解決することができます。
デジタルへのローマ数字:
私たちは考えた:私たちは法律を遵守することができます:通常の状況下では、ポストの最初の大きな文字、小文字を表し;
特殊なケースでは、小さな文字大きな文字が前になりますが、対応して得られる値は、大規模なアルファベットである - 非常に小さいです
そこで、我々は使用し、マッピングハッシュテーブルのサイズを使用することができますそれ以外の場合は、一般的なダイレクト+対応する値では、ローマ字を比較するために、ハッシュテーブルを-対応する値を
クラスのソリューション{ パブリック: // ハッシュテーブルマッピング文字、特殊なプロセス条件:文字の後の文字は、==の前にマイナスになる<文字の前に int型の romanToInt(文字列S){ 地図 < CHAR、INT > ハッシュ; ハッシュ[ 「I 」 ] = 1。; ハッシュ[ ' V ' ] = 5。; ハッシュ[ ' X- ' ] = 10 ; ハッシュ[ ' L ' ] = 50 ; ハッシュ[ ' C' ] = 100 。 [ハッシュ' D ' ] = 500 。 [ハッシュ' M ' ] = 1000年。 int型の合計= 0 ; 用(int型 iは= 0 ; iが(s.sizeを<)++ i)が { 場合(ハッシュ[S [i]は<ハッシュ[S [I + 1 ]]) { 合計 = - [[i]はS]ハッシュ; 続け; } 和 + = ハッシュ[S [I]]。 } 戻り値の合計。 } }。
デジタル転送ローマ数字:
、法律を遵守するために、次に最大数を表すために、より少ない文字を使用してみてください、この質問は、貪欲アルゴリズムで重要であり、そして:私は思った(ローマのローマの数が以前の数を追加することによって得ることはできない)、それらの必要な数を見つける最大から最小のローマへ
だから、聞かせて、ローマにあるテーブルの必要数を構築して、貪欲な思考を計算します。
クラスのソリューション{ パブリック: // 貪欲アルゴリズム:最大のものから始めて、最小限の文字を使用して 文字列 intToRoman(int型NUM){ 地図 < int型、文字列 > = {{mapRom 。1、" I " }、{ 4、" IV " }、{ 。5、" V " }、{ 9、" IX " }、 { 10、" X- " }、{ 40、" XL " }、{ 50、" L " }、{ 90、" XC " }、 { 100、" C " }、{ 400、" CD " }、{ 500、" D " }、 { 900、" CM " }、{ 1000年、" M " }}; 自己r_iter =mapRom.rbegin(); 文字列RET; 一方、(NUM> 0 && r_iter =!mapRom.rend()) { 場合(NUM> = r_iter-> 最初の) { RET + = r_iter-> 第二; NUM - = r_iter-> まず、 } 他 r_iter ++ ; } 戻りRET。 } }。