题目
个人解
有了昨天的基础,今天这种题也就是变个形式而已,本质都是一样的。本题要注意的就是最好一个指针再数组索引的时候可能出现数组下标越界异常(一开始就应该想到)。
class Solution:
def romanToInt(self, s: str) -> int:
mp={"M":1000,"CM":900,"D":500,"CD":400,"C":100,"XC":90,
"L":50,"XL":40,"X":10,"IX":9,"V":5,"IV":4,"I":1}
ans,x=0,0
while x<len(s):
if x+1<len(s) and s[x:x+2] in mp:
ans+=mp[s[x:x+2]]
x+=2
else :
ans+=mp[s[x]]
x+=1
return ans
最后结果看一下结果:
这个题目就很秀
java的一种实现方式,用switch代替hashmap竟然可以快这么多。当然左边小做减法,左边大做加法的想法也是一种很好的思路。
用时 99.93%,内存98.73%,简单解法
然后我用python实现了一下,python并没有switch,官方建议用if实现:
class Solution:
def romanToInt(self, s: str) -> int:
def getValue(ch):
if ch=='I':
return 1
elif ch=='V':
return 5
elif ch=='X':
return 10
elif ch=='L':
return 50
elif ch=='C':
return 100
elif ch=='D':
return 500
elif ch=='M':
return 1000
else:
return 0;
ans=0
preNum=getValue(s[0])
for i in range(1,len(s)):
temp=getValue(s[i])
ans-=preNum if preNum<temp else -preNum
preNum=temp
ans+=preNum
return ans
速度确实有所提高,但是内存呢???????5%真是个迷
真题代码看着也没有字典写出来的简洁。
一种娱乐代码,仅供娱乐,小聪明而已。
画解算法
我的想法跟画解算法,竟然一点都没差别。哈哈哈哈。不明白的可以看看过程,以及java实现
权限&免责&交流声明