LeetCode 12 Integer to Roman(整数からローマ数)


翻訳
        ,         。

      1 3999  。

テキスト
Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

最初は無数の変数とifを使っていたとは言わないが...
その後、こんなに多くの変数に耐えられずに列挙したので、次は迎刃して解きました.
ローマ数がどのようにカウントされているかを理解するために、ここで図を切りました.具体的には、マイクロソフトBingで検索することができます.
では、コードを先に貼ります.
public class Solution
{
    public string IntToRoman(int num)
    {
        string result = "";
        Type R = typeof(Roman);

        foreach (var r in Enum.GetNames(R).Reverse())
        {
            while (num >= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d")))
            {
                result += r.ToString();
                num -= int.Parse(Enum.Format(R, Enum.Parse(R, r), "d"));
            }
        }
        return result;
    }
}
public enum Roman
{
    M = 1000,
    CM = 900,
    D = 500,
    CD = 400,
    C = 100,
    XC = 90,
    L = 50,
    XL = 40,
    X = 10,
    IX = 9,
    V = 5,
    IV = 4,
    I = 1
};

今日は後でC#列挙の使い方をブログに貼りますので、知らない方はご注目ください.
列挙の使い方に加えて、この問題ではこれらのローマ数のルールをよく理解する必要があると思います.つまり、9と4という数も列挙に追加することを覚えておいてください.
ではIntoRomanでは何をしているのでしょうか.
  • Typeとtypeofを組み合わせてR
  • を新規作成
  • foreachで列挙中のすべての要素
  • を遍歴する
  • Reverse()を付けることを覚えておいてください.なぜかというと、つけないでください.
  • numが列挙中の数字より大きい場合、resultに対応する文字列(例えば「M」)を
  • に追加する.
  • 最後にnumでさっき使った数字を減らし、数字も列挙することで
  • を取得する.
  • 最後にresult
  • に戻る
    さあ、ここまでで、次の問題を迎える準備をします.
    次の問題はやはりローマ数についてですが、ローマ数から整数数に変換します.転送ゲート:LeetCode 13 Roman to Integer(ローマ数から整数数)へようこそ.