话不多说,直接上题目:
class Solution(object): def romanToInt(self, s): l = list(s) print(l) num = 0 biaozhiwei = False for i in range(len(s)): if biaozhiwei: biaozhiwei = False continue if l[i] == 'I': if i+1 < len(s) and l[i+1] == 'V': num = num + 4 biaozhiwei = True elif i+1 < len(s) and l[i+1] == 'X': num = num + 9 biaozhiwei = True else: num = num + 1 if l[i] == 'X': if i+1 < len(s) and l[i+1] == 'L': num = num + 40 biaozhiwei = True elif i+1 < len(s) and l[i+1] == 'C': num = num + 90 biaozhiwei = True else: num = num + 10 if l[i] == 'C': if i+1 < len(s) and l[i+1] == 'D': num = num + 400 biaozhiwei = True elif i+1 < len(s) and l[i+1] == 'M': num = num + 900 biaozhiwei = True else: num = num + 100 if l[i] == 'V': num = num + 5 if l[i] == 'L': num = num + 50 if l[i] == 'D': num = num + 500 if l[i] == 'M': num = num + 1000 return num复制代码
通过不停的判断每一位,加相应的值,如果是I,X,C则需要判断后续字母,如果后续字母是特殊字符,则需要加相应的值,而且在下次循环的时候,需要跳过。
这种方式太麻烦了,需要做很多的判断,还要做特殊处理,不是一个好的选择,通过观察数字的特殊规则,可以发现一个规律,如果后续字母所代表的数字,大于当前字母,则当前位和后续位合起来表示的数字,正好是后续字母代表的数字,减去当前数字,这样代码就能够简洁一些了:class Solution(object): def romanToInt(self, s): a = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000} num = 0 for i in range(len(s)): if i < len(s)-1 and a[s[i]]
通过一次判断,就能概括所有的特殊情况,nice!