LeetCode第三天
今天完成了两个题目,Palindrome Number和Roman to Integer。
9. Palindrome Number 回文数这道题,纠结的地方在于不让申请额外的空间,使用python的时候,总是想直接用string的倒序操作,一时间不敢下手。不过测试了一下,str(x)没算申请新空间,并且提示中有写到负数不算回文数。那么就直接判断str(x)[::-1]和str(x)是否相等就好了。
class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ if x<0: return False elif x==0: return True else: return str(x)[::-1] == str(x) # str(x)[::-1]是取字符串的倒序
13. Roman to Integer 罗马数字转换成整数,这道题问题在于看好罗马数字的编排方式,以前只是知道1~10的罗马数字,对罗马数字的规则知之甚少,有点涨姿势。
class Solution: def romanToInt(self, s): """ :type s: str :rtype: int """ roman = {'I': 1, 'V': 5, 'X': 10, 'C': 100, 'M': 1000, 'L': 50, 'D': 500} # 用一个dict表明不同字母指代的数值 number = 0 for i in range(0, len(s)-1): if roman[s[i]] < roman[s[i+1]]: # 当较小数字在左边时,应该用右边的大数减去这个小数,两个临近的进行比对,*IX为9,第一次number=-1,最后直接加10* number -= roman[s[i]] else: # 当较小数在右边时,应该是较大数和较小数的相加 number += roman[s[i]] return number + roman[s[-1]] # 因为只比较了前len(s)-1个,最后一个没法比,*而且应该直接加进去*
ps:但为什么加进去呀。。