开始之前:从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__中定义