【LeetCode 12. Integer to Roman】

描述:

羅馬數字包含以下七種字符:I,V,X,L,C,D和M。

字符          數值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 羅馬數字 2 寫做 II,即爲兩個並列的 1。12寫做 XII,即爲X+II。 27 寫做XXVII, 即爲XX+V+II

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做IIII,而是IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示爲IX。這個特殊的規則只適用於以下六種情況:

  • 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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章