【Leetcode刷题】算法:罗马数字转整数

这篇具有很好参考价值的文章主要介绍了【Leetcode刷题】算法:罗马数字转整数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题

【Leetcode刷题】算法:罗马数字转整数

二、代码理解

class Solution:
    def romanToInt(self, s: str) -> int:
        answer=0
        length = len(s)
        d={'I':1,'V':5,'X':10, 'L':50,'C':100, 'D':500,'M':1000}
        for i in range(length-1):
            if d[s[i+1]]>d[s[i]]:
                answer=answer-d[s[i]]
            else:
                answer=answer+d[s[i]]
        answer=answer+d[s[length-1]]
        return answer
  • 定义一个 Solution 类,该类包含一个 romanToInt 方法用于将罗马数字转换为整数。
  • 初始化变量 answer 为 0,用于保存转换后的整数值。
  • 获取输入字符串 s 的长度,并保存在变量 length 中。
  • 创建一个字典 d,将每个罗马数字字符与对应的数值进行映射。
  • 使用 for 循环遍历 s 中的每个字符,从第一个字符到倒数第二个字符。
  • 如果当前字符的数值小于后一个字符的数值,则将 answer 减去当前字符的数值。
  • 否则,将 answer 加上当前字符的数值。
  • 将 answer 加上最后一个字符所对应的数值,完成整个罗马数字的转换。
  • 返回最终的结果 answer。

这段代码的目的是通过遍历罗马数字字符串 s,根据相邻字符的大小关系,将对应的数值累加或累减到 answer 中,最终得到整数形式的罗马数字。

第二种方案:

class Solution:
    def romanToInt(self, s: str) -> int:
        answer = 0
        length = len(s)
        d = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
        
        for i in range(length-1):
            if d[s[i]] < d[s[i+1]]:
                answer -= d[s[i]]
            else:
                answer += d[s[i]]
        
        answer += d[s[length-1]]
        
        return answer

再次尝试:

class Solution:
    def romanToInt(self, s: str) -> int:
        d = {
            'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
        }
        res = 0
        prev_val = 0
        
        for c in reversed(s):
            curr_val = d[c]
            if curr_val < prev_val:
                res -= curr_val
            else:
                res += curr_val
            prev_val = curr_val
        
        return res

最后一版:

class Solution:
    def romanToInt(self, s: str) -> int:
        roman_values = {
            'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000
        }
        res = 0
        prev_val = 0
        
        for c in reversed(s):
            curr_val = roman_values[c]
            if curr_val < prev_val:
                res -= curr_val
            else:
                res += curr_val
            prev_val = curr_val
        
        return res
  • 定义一个 Solution 类,该类包含一个 romanToInt 方法用于将罗马数字转换为整数。
  • 创建一个字典 roman_values,将每个罗马数字字符与对应的数值进行映射。
  • 初始化变量 res 为 0,用于保存转换后的整数值。
  • 初始化变量 prev_val 为 0,用于保存前一个字符的数值。
  • 使用 reversed() 函数对字符串 s 进行反向迭代,从最后一个字符到第一个字符。
  • 对于每个字符 c,获取它对应的数值 curr_val。
  • 如果 curr_val 小于 prev_val,说明当前字符表示的数值应该减去,因此将其从 res 中减去。
  • 否则,将 curr_val 加到 res 中。
  • 更新 prev_val 为当前字符的数值。
  • 返回最终的结果 res,即整数形式的罗马数字。

这段代码的目的是通过反向迭代罗马数字字符串 s,根据相邻字符的大小关系,将对应的数值累加或累减到 res 中,最终得到整数形式的罗马数字。代码利用了反向迭代的特性,避免了每次比较字符的前后关系,从而简化了逻辑和代码实现。

最终的结果为:

【Leetcode刷题】算法:罗马数字转整数文章来源地址https://www.toymoban.com/news/detail-453104.html

到了这里,关于【Leetcode刷题】算法:罗马数字转整数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java | Leetcode Java题解之第13题罗马数字转整数

    题目: 题解:

    2024年04月09日
    浏览(43)
  • LeetCode面向运气之Javascript—第13题-罗马数字转整数-99.21%

    给定一个罗马数字,将其转换成整数。 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M 分别代表1,5,10,50,100,500,1000 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右

    2024年02月07日
    浏览(46)
  • LeeCode前端算法基础100题(17)- 罗马数字转整数

    罗马数字包含以下七种字符:  I ,  V ,  X ,  L , C , D  和  M 。 例如, 罗马数字  2  写做  II  ,即为两个并列的 1 。 12  写做  XII  ,即为  X  +  II  。  27  写做   XXVII , 即为  XX  +  V  +  II  。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特

    2024年01月19日
    浏览(51)
  • LeeCode前端算法基础100题(18)整数转罗马数字

    一、问题详情: 罗马数字包含以下七种字符:  I ,  V ,  X ,  L , C , D  和  M 。 例如, 罗马数字 2 写做  II  ,即为两个并列的 1。12 写做  XII  ,即为  X  +  II  。 27 写做   XXVII , 即为  XX  +  V  +  II  。 通常情况下,罗马数字中小的数字在大的数字的右边。但

    2024年01月18日
    浏览(41)
  • 13---罗马数字转整数

    罗马数字包含以下七种字符:  I ,  V ,  X ,  L , C , D  和  M 。 例如, 罗马数字 2 写做  II  ,即为两个并列的 1 。 12 写做  XII  ,即为  X  +  II  。 27 写做   XXVII , 即为  XX  +  V  +  II  。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例

    2024年02月12日
    浏览(40)
  • 面试经典150题——罗马数字转整数

    罗马数字包含以下七种字符:  I ,  V ,  X ,  L , C , D  和  M 。 例如, 罗马数字 2 写做  II  ,即为两个并列的 1 。 12 写做  XII  ,即为  X  +  II  。 27 写做   XXVII , 即为  XX  +  V  +  II  。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例

    2024年02月12日
    浏览(36)
  • 暴力破解(if循环)解决leetcode数字转成罗马数字

    1.题目描述 2.解题思路 刚看到这个题目的时候,感觉说的有点啰嗦,其实不难发现,这个题目和之前的给你多少钱,什么2元,5元的,给你一个数字,让你算各种钱币有多少张。无非就是从小到大进行判断,首先判断给定的数字,能容纳多少个最大的,然后依次减少。 3.代码

    2024年02月19日
    浏览(40)
  • 力扣:罗马转整数

    class 定义了一个类Solution,这个类里面有有私有成员和共有成员 首先定义了一个私有成员,我也不知道为什么需要这个私有成员,unordered_mapunordered_mapchar, int用法再去搜搜。 注意两个头文件不要加h。 代码整体的思路就是定义一个类,这个类首先定义了私有对象一个map的字符到

    2024年02月06日
    浏览(42)
  • leetcode刷题:消失的数字

    数组 nums 包含从 0 到 n 的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 注意: 本题相对书上原题稍作改动 示例 1: 示例 2: 针对于这道题,我们提供了三种解法: 首先使用快排对数组进行排序,使其变成有序数组,由题意得

    2024年01月24日
    浏览(35)
  • 【算法与数据结构】343、LeetCode整数拆分

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :博主做这道题的时候一直在思考,如何找到 k k k 个正整数, k k k 究竟为多少合适。从数学的逻辑上来说,将 n n n 均分为 k k k 个数之后, k k k 个数的乘积为最大(类似于相同周长

    2024年01月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包