LeetCode_Python3: 13. 罗马数字转整数(简单)

开始之前:从2018/8/27开始刷LeetCode,计划每周刷五题,周末进行总结并发布在csdn上,计划先刷150道题,从简单开始。

week 1-4


要求:

比较需要注意的一点在于,实际上只可能有一个小数出现在大数前而不会存在多个的情况。如IIV这种数字是不可能出现的,这就会方便很多了。

CODE:

class Solution:
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        
        # 将罗马数字存为key,数值存为val
        dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        # 为了方便使用for循环将字符串倒序
        s = s[::-1]
        # 将第一个罗马数对应的数字作为结果的初值
        # 因为原字符串的最后一个数字肯定是加上而不是减去的
        num = dic[s[0]]
        # 将第一个罗马数对应的数字作为上一拍的记录
        last = dic[s[0]]
        
        # 从第二个字符开始循环
        for c in s[1:]:
            if dic[c] < last:
                num -= dic[c] # 注意此时不需要更新last
            else:
                num += dic[c]
                last = dic[c]
        return num

结果:

 

补充:

如果要是使用 for i in range(len(s)-1)好像会快很多...

 

知识点:

1. Str切片

s = 'string'

s[1:] = 'tring'

2. 类

class People:
    # 定义基本属性
    name = ''
    age = 0
    # 定义私有属性,在类外部无法直接调用
    __weight = 0  # 两个下划线定义私有属性
    # 定义构造方法
    def __init__(self,n,a,w):  # self代表类的实例
        self.name = n
        self.age = a
        self.__weight = w
    # 定义方法
    def speak(self):
        print(self.name, self.age)
    

IN: p = People('runnob',10,30)   # 实例化n,a,w

IN: p.speak()

OUT: 'runoob' 10

 

IN: p.name

OUT: runoob

IN: p.__weight

OUT: Error!

 

注意:

1. 如果不定义__init__ ,那么p.name直接使用定义基本属性时的值,如下图所示:

2. 如果加入

def say(self,a):
    a += 2
    print(a)

IN: p.say(2)

OUT: 4

可以发现a为方法用的参数,不需要在__init__中定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值