iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Mobile Development

30天用 Swift 解 LeetCode 問題系列 第 29

Day 29 - 13. Roman to Integer - 解法與複雜度分析 - LeetCode in Swift

  • 分享至 

  • xImage
  •  

hero

不用特別去判斷到底是不是 4 或 9 。

只要看「現在的位數」對應到的值是不是比「下一個位數」對應到的值還要小,就可以判定。

是的話就需要用減法的方式處理,例如 IX10 - 1IV5 - 1

class Solution {
    func romanToInt(_ s: String) -> Int {
        let symbols: [Character: Int] = [
            "I": 1,
            "V": 5,
            "X": 10,
            "L": 50,
            "C": 100,
            "D": 500,
            "M": 1000,
        ]
        
        let original = Array(s)
        var result = 0
        var index = 0 
        
        while index < original.count {
            let current = original[index]
            let value = symbols[current] ?? 0
            var change = value
            
            if index != original.count - 1 {
                let next = original[index + 1]
                let nextValue = symbols[next] ?? 0
                if value < nextValue {
                    change = nextValue - value
                    index += 1
                }
            }
            
            result += change
            index += 1
        }
        
        return result
    }
}

上一篇
Day 28 - 9. Palindrome Number - 解法與複雜度分析 - LeetCode in Swift
下一篇
Day 30 - 15. 3Sum - 解法與複雜度分析 - LeetCode in Swift
系列文
30天用 Swift 解 LeetCode 問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言