罗马数字转整数

我自己的代码:

roman_num = {'I': 1, 'IV': 4, 'IX': 9, 'V': 5, 'X': 10, 'XL': 40, 'XC': 90, 'L': 50, 'C': 100, 'CD': 400, 'CM': 900, 'D': 500, 'M': 1000}
num = 'LVIII'
list_num = []
i = 0
while i < len(num):
if i < len(num)-1:
str = num[i] + num[i+1]
if str in roman_num:
list_num.append(roman_num[str])
i += 2
print(str)
else:
list_num.append(roman_num[num[i]])
i += 1
print(num[i])
else:
list_num.append(roman_num[num[i]])
print(num[i])
i += 1
sum1 = 0
for i in list_num:
sum1 += i
print(sum1)



使用字典




网上的另一种解法:

从罗马数字我们可以得出这么一条规律:
从左往右一位一位的看,如果这一位数字比它右边一位的数字大或与其相等,则加上这一位代表的值,如果它比右边一位小,则减去这一位代表的数字。
例如: 'MMCMLXIV': 第一位是M,它的后一位也是M,所以 num = 0 + 1000,之后 M > C, num = num + 1000 =2000,之后到特殊值,因为C<M,所以num=num-C =2000-100=1900,之后再加上1000得到 num=2900……以此类推进行下去,最后可得到 num = 2964
需要注意的是,位与后一位的比较只需进行到倒数第二位即可,因为最后一位没有比它小的一位能够进行比较,直接加上最后一位代表的值即可。

代码块
class Solution:
def romanToInt(self, s: str) -> int:
roma_nums = {'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}
num = 0
for i in range(len(s)-1):
if roma_nums[s[i]]>=roma_nums[s[i+1]]:
num += roma_nums[s[i]]
else:
num -= roma_nums[s[i]]
last_num = s[len(s)-1]
num = num + roma_nums[last_num]
return num

作者:kanomei
链接:https://leetcode-cn.com/problems/roman-to-integer/solution/python3-bao-li-jie-fa-by-kanomei/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/hehehe-wy7/p/12720832.html