题意:
解题思路:
思路:
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,
}