题意:
解题思路:
思路: 1. 将罗马数字字符跟数字做一个映射; 2. 从前往后扫描,如果s[i+1] > s[i],证明右边的数字比左边要大, 这时候用0减去左边的数字得到一个差值,再将i向后移动一位,如果s[i+1] < s[i],则直接累积s[i]的值; 3. 比如IV =》s[i + 1] = 5, s[i] = 1, 得到 0-1 = -1,然后用 -1 + 5 = 4
PHP代码实现:
class Solution { function romanToInt($s) { $arr = ['I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000]; $num = 0; $count = strlen($s); for ($i = 0; $i < $count; $i++) { $next = $i + 1; if ($arr[$s[$next]] > $arr[$s[$i]]) $num -= $arr[$s[$i]]; else $num += $arr[$s[$i]]; } return $num; }}
GO代码实现:
func romanToInt(s string) int { num := romanMap[s[len(s)-1]] for i := len(s) - 2; i >= 0; i-- { if romanMap[s[i]] < romanMap[s[i+1]] { num -= romanMap[s[i]] } else { num += romanMap[s[i]] } } return num}var romanMap = map[byte] int { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000,}