LeetCode-13-罗马数字转整数

题目

在这里插入图片描述
在这里插入图片描述

个人解

有了昨天的基础,今天这种题也就是变个形式而已,本质都是一样的。本题要注意的就是最好一个指针再数组索引的时候可能出现数组下标越界异常(一开始就应该想到)。

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

最后结果看一下结果:
nimg.cn/20201217131038254.png)

这个题目就很秀

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实现
权限&免责&交流声明

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值