整数へLeetCode_ローマ数字

  1. 整数困難にローマ数字822は、単に次の7つの文字、ローマ数字が含ま:I、V、X、L、C、D及びM.

数字
I. 1
V. 5
X-10
L 50
C 100
D 500
M 1000年

例えば、ローマ数字2 IIのように書く、X + IIである二つの平行1.12 XII、として書かなければなりません。図27は、XXVII、即ちXX + V + IIのように書きます。

一般的に、大量に右にローマ数字の数が少ないです。しかし、例外もある、例えば、4 IIIIを書きますが、IVはありません。左番号5番号1において、多数の数が4を得た少ない数5で表される値に等しいです。同様に、数9は、IXで表されます。この特別なルールは以下の6つのケースにのみ適用されます。

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

整数に変換するために、ローマ数字を考えます。入力は3999から1の範囲にあることを保証します。

例1:

入力: "III"
出力:3

例2:

入力: "IV"
出力:4

例3:

入力: "IX"
出力:9

例4:

入力: "LVIII"
出力:58
説明:L = 50、V = 5 、III = 3。

例5:

入力: "MCMXCIV"
出力:1994
説明:= 1000 M、CM = 900 、XC = 90、IV = 4
265205回161549回から提出されました


辞書暴力行為

ハッシュテーブルに対処するための不便、辞書は非常に良いです

public class Solution 
{
    public int RomanToInt(string s) 
    {
        Dictionary<string,int> dc = new Dictionary<string,int>();
        dc.Add("I",1);
        dc.Add("IV",4);
        dc.Add("IX",9);
        dc.Add("V",5);
        dc.Add("X",10);
        dc.Add("XL",40);
        dc.Add("XC",90);
        dc.Add("L",50);
        dc.Add("C", 100);
        dc.Add("CD", 400);
        dc.Add("CM", 900);
        dc.Add("D", 500);
        dc.Add("M", 1000);
        var sum = 0;
        for(var i = 0;i < s.Length;)
        {
            if(i + 2 <= s.Length && dc.ContainsKey(s.Substring(i,2)))
             {
                 sum += dc[s.Substring(i,2)];
                 i += 2;
             } else {
                 sum += dc[s.Substring(i,1)];
                 i ++;
             }
        }
        return sum;
    }
}

ここに画像を挿入説明

公開された38元の記事 ウォンの賞賛1 ビュー783

おすすめ

転載: blog.csdn.net/weixin_45774706/article/details/104834381