题意
给出一个罗马数字,将它转成十进制数字。
范围是 1~3999。
题解
一点坑都没有。
关于罗马数字的介绍看 维基 就好了。
只需要记得 “左减右加” 原则就好了。
代码
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""ro_10 = {'I': 1,'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000
}
ans = 0
for i in range(len(s) - 1):
ans += ro_10[s[i]] if ro_10[s[i]] >= ro_10[s[i + 1]] else -ro_10[s[i]]
ans += ro_10[s[len(s) - 1]]
return ans
结果
3999 / 3999 test cases passed.
Status: Accepted
Runtime: 232 ms
Your runtime beats 7.27% of pythonsubmissions.
就是速度有点慢。
桩程序
if __name__ == '__main__':
cases = [
{'ans': 1, 'num': 'I'},
{'ans': 8, 'num': 'VIII'},
{'ans': 14, 'num': 'XIV'},
{'ans': 15, 'num': 'XV'},
{'ans': 16, 'num': 'XVI'},
{'ans': 199, 'num': 'CXCIX'},
{'ans': 3978, 'num': 'MMMCMLXXVIII'},
]
for item in cases:
ans = (Solution()).romanToInt(s=item['num'])
print(str(ans == item['ans']) + "\t=>" + str(ans) + ":" + str(item['ans']))
发表回复