0x00 问题描述

Roman numerals are represented by seven different symbols: I, V, X, L, C, D, and M.
罗马数字以下列字母组成

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

For example, “two” is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty-seven is written as XXVII, which is XX + V + II.
例如,数字2的罗马数字为II,相当于两个1相加。12则以XII表示,24的罗马数字为XXVII,相当于XX+V+II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
罗马数字顺序是从左到右,最左边是最大值,最右为最小值。然而阿拉伯数字4并不是以IIII来表示,罗马数字中的4是以IV表示的。同样9对应的是IV。

I can be placed before V (5) and X (10) to make 4 and 9.
X can be placed before L (50) and C (100) to make 40 and 90.
C can be placed before D (500) and M (1000) to make 400 and 900.

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
系统将输入一个罗马数字,将其转化为阿拉伯数字整数输出。该输入的范围将被限制在1-3999

Example:

Input: "III"
Output: 3

Input: "IV"
Output: 4

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

0x01 问题分析

除了上述组合的情况,进行从右向左逐位转化并将结果相加即可。考虑到上述组合近出现在头一位比第二位小的情况下。
只需在循环中加入当前位和下一位的比对即可,既出现当前位大于下一位的情况下,i值跳过下一位,且减去下一位罗马数字对应的值即可。

0x02 Go代码

var symbol_to_Value = map[byte]int {
    'I' : 1,
    'V' : 5,
    'X' : 10,
    'L' : 50,
    'C' : 100,
    'D' : 500,
    'M' : 1000,
}
func romanToInt(s string) int {
    var ret int = 0
    s = "#" + s
    for i := len(s) - 1 ; i > 0 ; i-- {
           _current := s[i] 
        _next := s[i-1]

        ret += symbol_to_Value[_current]
        if  symbol_to_Value[_current] > symbol_to_Value[_next]{
            ret -= symbol_to_Value[_next]
            i--
        } 
        
    }
    return ret
}

标签: Golang, LeetCode

评论已关闭