【LeetCode 12. Integer to Roman】

5923 ワード

説明:
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.
              
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例えば、ローマ数字2はIIと書かれており、2つの並列の1である.12はXIIと書いてあります.つまりX+IIです.27はXXVIIと書いてあります.つまりXX+V+IIです.
通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊なルールは、次の6つの場合にのみ適用されます.
  • Iは、V(5)およびX(10)の左側に配置され、4および9を表すことができる.
  • Xは、L(50)およびC(100)の左側に配置され、40および90を表すことができる.
  • Cは、D(500)およびM(1000)の左側に配置され、400および900を表すことができる.

  • 整数を与え、ローマ数字に変換します.入力は1~3999の範囲であることを確認します.
    例1:
      :3
      : "III"
    

    例2:
      : 4
      : "IV"
    

    例3:
      :9
      : "IX"
    

    例4:
      :58
      : "LVIII"
      : L = 50, V = 5, III = 3.
    

    例5:
      :1994
      : "MCMXCIV"
      : M = 1000, CM = 900, XC = 90, IV = 4.
    

    Kotlinコード実装:
    var number = intArrayOf(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)
    var str = arrayOf("M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I")
    var sb = StringBuilder()
    
    fun intToRoman(num: Int): String {
        var x = num
        for (i in number.indices) {
            while (x >= number[i]) {
                sb.append(str[i])
                x -= number[i]
            }
            if (x == 0) {
                break
            }
        }
        return sb.toString()
    }
    
    

    参照先:https://leetcode.com/problems/integer-to-roman/