当前位置: 首页 > news >正文

云南做网站费用在线生成网页网站

云南做网站费用,在线生成网页网站,长春做网站好的公司,c2c模式力扣题库13,罗马数字转整数。 题目链接点这里。 文章目录题目描述解题思路初始答案改进答案注意事项题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 5…

力扣题库13,罗马数字转整数。

题目链接点这里。

文章目录

    • 题目描述
    • 解题思路
    • 初始答案
    • 改进答案
    • 注意事项

题目描述

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

示例 1:

输入: “III”
输出: 3
示例 2:

输入: “IV”
输出: 4
示例 3:

输入: “IX”
输出: 9
示例 4:

输入: “LVIII”
输出: 58
解释: L = 50, V= 5, III = 3.
示例 5:

输入: “MCMXCIV”
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

提示:

题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
IC 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考罗马数字 - Mathematics 。

解题思路

做了这道题我才知道原来罗马数字就是简单的将数字放在一起,不像阿拉伯数字不同的位数会代表不同的倍数。所以其实思路也很简单,类似于队列,每出来一个值就查询一下字典对应的结果然后进行累加就可以了。只是需要注意几个特例,在处理当前元素的时候还需要考虑下一个元素。

初始答案

class Solution:def romanToInt(self, s: str) -> int:temp=list(s)length = len(temp)items={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}combines={'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}i=0result=0while i < length:if i==length-1:result+=items[temp[i]]i+=1elif temp[i] in ['I','X','C'] and temp[i]+temp[i+1] in combines:result+=combines[temp[i]+temp[i+1]]i+=2else:result+=items[temp[i]]i+=1return result

这里直接将所有的可能性都放进了字典里面,对字符串遍历了一边,时间复杂度O(N)。执行用时: 68 ms,击败了35%的提交。

改进答案

网上还有个思路让我眼前一亮,就是结合罗马数字的特性,从高位到低位的字母代表的数字应该是递减的。假如出现了一个增加就说明有事情,出现了特殊情况。特殊情况下就相当于用后面一位减去前面一位。所以一旦遇到这种特殊情况就改一下符号就行,就省略了一个字典的查询。

class Solution:def romanToInt(self, s: str) -> int:temp=list(s)length = len(temp)items={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}result =0i=0while i < length:cur = items[temp[i]]if i == length-1:result+=curreturn resultelse:nex = items[temp[i+1]]if cur < nex:result -= cur i+=1else:result+=cur i+=1return result

思路虽然很新奇,但是执行用时: 68 ms,跟上面一样。

心有不甘,觉得是不是每次循环中进行了两次字典查询耗时太多,于是修改了下代码

class Solution:def romanToInt(self, s: str) -> int:li=list(s)length = len(li)items={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}result =0temp=0cur =0for i in range(length):item = li[i]cur = items.get(item)if cur > temp:result -=tempelse:result +=temptemp = curresult+=cur return result

增加了一个临时变量来存储,结果执行用时: 84 ms。时间不减反增。

其实每种解法的时间复杂度都是O(N),很神奇。

注意事项

网上有人用java的switch/case结构,只用了4秒就搞定了,但其实思路差不多。我很纳闷,难道hashmap的查询就比switch/case慢这么多吗,然后发现python没有switch/case结构。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

http://www.lbrq.cn/news/2696545.html

相关文章:

  • 做教育网站需要规划哪些内容网络服务包括哪些内容
  • 菏泽做企业网站个人接外包项目平台
  • 深圳网站设计公司是什么蚁百杭州网站seo优化
  • 个人网站做淘宝客如何备案最好的网络营销软件
  • 建立网站成本如何开展网络营销
  • iview可以做门户网站吗网络营销的5种方式
  • 网站建设过程小结谷歌账号注册入口官网
  • 中企动力做网站多少钱品牌战略
  • 做网站赚大钱网址解析ip地址
  • 衢州网络公司做网站深圳网络品牌推广公司
  • 青岛知名网站建设公司360竞价推广
  • wordpress改了ip白杨seo
  • 网站后台模板 仿cnzz营销做得好的品牌
  • 贵德县建设局网站河南关键词优化搜索
  • 南昌网站搭建服务淘宝店铺怎么推广和引流
  • 搏彩网站开发建设免费自己制作网站
  • 天津龙腾公司做网站java培训
  • 企业公司网站制作网站seo优化分析
  • 湖南网站建设制作网站seo思路
  • 网站推广软文案例奶盘seo伪原创工具
  • 专业手机网站设计优化英文
  • 自己开网店网络推广优化seo
  • 网站开发后服务费深圳谷歌网络推广公司
  • 公司网站能自己做么友情链接工具
  • 定制建站网站建设google官网入口下载
  • 长葛网站建设线上营销平台
  • 什么网站做海报app推广平台网站
  • 南宁公司做网站阿里云万网域名购买
  • 雄安做网站互联网运营培训课程
  • 那里做网站最好先做后付费的代运营
  • nm命令和nm -D命令参数
  • 面试实战 问题二十九 Java 值传递与引用传递的区别详解
  • [论文阅读] (41)JISA24 物联网环境下基于少样本学习的攻击流量分类
  • OrbStack 入门教程:macOS 上的轻量级容器与虚拟机管理工具
  • 2438. 二的幂数组中查询范围内的乘积
  • Java学习 -- 可变参数与Collections工具类