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:但为什么加进去呀。。

 

posted @ 2018-03-01 22:30  Vancuicide  阅读(151)  评论(0编辑  收藏  举报