4.羅馬數(shù)字轉(zhuǎn)整數(shù)-Roman to Integer

LeetCode Link: https://leetcode.com/problems/roman-to-integer/

Description:

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

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 羅馬數(shù)字 2 寫做 II ,即為兩個并列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為 IX。這個特殊的規(guī)則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。輸入確保在 1 到 3999 的范圍內(nèi)。

Example:

Input: "III"
Output: 3

Input: "IV"
Output: 4

Input: "IX"
Output: 9

Input: "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

Tints:

1.羅馬符號轉(zhuǎn)數(shù)字的本質(zhì)是:需要比較左邊和右邊符號代表的數(shù)值的大小。如果左邊的大于右邊的,加上左邊的數(shù),如果左邊的小于右邊的,減去左邊的數(shù)。最后一個符號無法比較,再加上最后一位。

IV = [1, 5]
num = -1+5 = 4

MCMXCIV = [1000, 100, 1000, 10, 1, 5]
num = +1000-100+1000+10-1+5 = 1994

2.將給定的羅馬字符串map成Int類型的數(shù)組,對于數(shù)組索引值為index的元素,再通過比較Array[index]與Array[index+1]的大小決定是加還是減。

Solution:

import Foundation

func romanToInt(_ s: String) -> Int {
    let sArray = s.map { (character) -> Int in
        switch character {
        case "I": return 1
        case "V": return 5
        case "X": return 10
        case "L": return 50
        case "C": return 100
        case "D": return 500
        case "M": return 1000
        default:
            return 0
        }
    }
    
    var num = 0
    var index = 0
    while index < sArray.count - 1 {
        if sArray[index] < sArray[index + 1] {
            num -= sArray[index]
        }else {
            num += sArray[index]
        }
        index += 1
    }
    
    return num + sArray[index]

}

Runtime: 20 ms, faster than 98.79% of Swift online submissions for Roman to Integer.

Memory Usage: 20.4 MB, less than 5.00% of Swift online submissions for Roman to Integer.

Analyze:使用map函數(shù)將一個String轉(zhuǎn)成Int類型的數(shù)組。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容