- https://leetcode.com/problems/roman-to-integer/
- https://leetcode-cn.com/problems/roman-to-integer/
- 数学
- 字符串
- 用字典作mapping: {roman : integer}
- 用ans这个变量保存结果
- 遍历罗马数字,如果当前数字小于下一个数字,则ans减去当前数字。反之,则ans加上当前数字。
- 最后一个数字无法和下一个数字比较(out of index),但是最后一个数字永远是相加的。
class Solution:
def romanToInt(self, s):
mapping = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
}
ans = 0
last_int = mapping[s[-1]]
for i in range(len(s) - 1):
current_roman = s[i]
next_roman = s[i+1]
current_int = mapping[current_roman]
next_int = mapping[next_roman]
if current_int >= next_int:
ans += current_int
else:
ans -= current_int
ans += last_int
return ans
class Solution:
def romanToInt(self, s):
mapping = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
}
ans = 0
for i, value in enumerate(s[:-1]): # s[:-1] 不同于 s[::-1]
current_int = mapping[s[i]] # mapping[value]
next_int = mapping[s[i+1]]
if current_int >= next_int:
ans += current_int
else:
ans -= current_int
ans += mapping[s[-1]]
return ans
func romanToInt(s string) int {
m := map[string]int{
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000,
}
sum := m[string(s[len(s)-1])]
for i := len(s) - 2; i >= 0; i-- {
currentInt := m[string(s[i])]
nextInt := m[string(s[i+1])]
if currentInt < nextInt {
sum -= currentInt
} else {
sum += currentInt
}
}
return sum
}
func romanToInt(s string) int {
m := map[string]int{
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000,
}
sum := m[string(s[len(s)-1])]
for i, v := range s[:len(s)-1] {
currentInt := m[string(v)]
nextInt := m[string(s[i+1])]
if currentInt < nextInt {
sum -= currentInt
} else {
sum += currentInt
}
}
return sum
}
func romanToInt(s string) int {
m := map[string]int{
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000,
}
sum := m[string(s[len(s)-1])]
for i := 0; i < len(s)-1; i++ {
currentInt := m[string(s[i])]
nextInt := m[string(s[i+1])]
if currentInt < nextInt {
sum -= currentInt
} else {
sum += currentInt
}
}
return sum
}