第四天-打开

187 阅读2分钟

话不多说,直接上题目:

实现代码如下:

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]]<a[s[i+1]]:
                num = num - a[s[i]]
            else:
                num = num + a[s[i]]
        return num

通过一次判断,就能概括所有的特殊情况,nice!