首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

这个Roman Number to Integer转换器代码可以更短吗?

这个问题涉及到将罗马数字转换为整数的代码实现。罗马数字是一种古罗马的数字表示方法,由一系列的符号组成。

关于这个问题,我们可以使用以下代码实现:

代码语言:python
代码运行次数:0
复制
def romanToInt(s: str) -> int:
    roman_to_int = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    result = 0
    prev_value = 0
    for c in s:
        value = roman_to_int[c]
        if value > prev_value:
            result += value - 2 * prev_value
        else:
            result += value
        prev_value = value
    return result

这个代码实现中,我们使用了一个字典来存储罗马数字和对应的整数值。然后,我们遍历输入的字符串,将每个字符对应的整数值累加到结果中。如果当前字符对应的整数值比前一个字符大,那么我们需要减去前一个字符的两倍值,以得到正确的结果。

这个代码实现已经相对较短,但是如果需要进一步缩短代码,可以使用以下代码实现:

代码语言:python
代码运行次数:0
复制
def romanToInt(s: str) -> int:
    roman_to_int = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    result = 0
    prev_value = 0
    for c in s:
        value = roman_to_int[c]
        result += value - 2 * prev_value if value > prev_value else value
        prev_value = value
    return result

这个代码实现中,我们使用了一个三元表达式来判断当前字符对应的整数值是否比前一个字符大,如果是,则减去前一个字符的两倍值,否则直接加上当前字符对应的整数值。这样可以使代码更简洁。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 013. 罗马数字转整数 | Leetcode题解

    这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和90。...只不过由于存在特殊规则增加了这个过程的复杂,不过同样可以用上面的思路解决。举个例子,“IX”,可以看作是-1+10=9;“XIX”可以看作是10-1+10=19。.../ * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容 * @param {string} s * @return {number} */ var...} num * @return {string} //作者:Alexer-660 //链接:https://leetcode-cn.com/problems/integer-to-roman/solution.../problems/integer-to-roman/solution/tan-xin-ha-xi-biao-tu-jie-by-ml-zimingmeng/ class Solution: def

    45030

    9. 细节见真章,Formatter注册中心的设计很讨巧

    (fieldType, printer, this)); addConverter(new ParserConverter(fieldType, parser, this)); } 从接口的实现可以看到这个...类型,但是你传入的是Person类型,这个时候conversionService就会发挥作用了 交由目标格式化器Printer执行实际的转换逻辑 可以说Printer它可以直接转,也可以是构建在conversionService...一般来说,我们有两种途径来达到此目的: 直接方式:写一个Person转String的转换器,专用 缺点明显:多写一套代码 组合方式(推荐):如果目前已经有Person -> Integer的了,...,因此还必须注册一个转换器,用于Integer -> Person桥接一下,这样就串起来了String -> Integer -> Person。...示例中为何强调:addConverter()注册转换器时请务必不要使用lambda表达式代替输入,会有什么问题? 这种功能组合/桥接的巧妙设计方式,你脑中还能想到其它案例

    42920

    漫画:臭长臭长的高频贪心面试题

    01 PART Integer to Roman 本题是leetcode第12题,意为整数转罗马数字,题目难度中等,代码通过九万次,建议掌握。...这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。...有一道很经典的题目 “硬币找零” 不也是一样的玩法。 然后,我们把题目中所有的字符列出来: 当然,除了这些还不够。...作为学术文章,虽然风格可以风趣,但严谨,我是认真的。本文所有代码均在leetcode进行过测试运行。 03 PART 啰嗦一下 这道题目限制了最大数为 3999,时间复杂度也就被限制成了O(1)。...(c[1][num / 10 % 10]); roman.append(c[0][num % 10]); return roman; } }; 这个解法应该没什么解释的

    38940

    SpringBoot返回前端Long型丢失精度咋办

    ); console.log(Number.MIN_SAFE_INTEGER); 9007199254740991 -9007199254740991 安全意思是说能够one-by-one表示的整数,...console.log(Number.MAX_SAFE_INTEGER + 1); // 结果:9007199254740992,精度未丢失 console.log(Number.MAX_SAFE_INTEGER...,精度未丢失 console.log(Number.MAX_SAFE_INTEGER + 4); // 结果:9007199254740996,精度丢失 console.log(Number.MAX_SAFE_INTEGER...在我们这个场景里不需要进行运算,且Java进行JSON处理的时候是能够正确处理long型的,所以只需要将数字转化成字符串就可以了。...Java 对象 canWrite:判断该转换器是否可以将 Java 对象转换成返回内容 getSupportedMediaTypes:获得该转换器支持的 MediaType 类型 read:读取请求内容并转换成

    4.2K21

    9. 细节见真章,Formatter注册中心的设计很讨巧

    (fieldType, printer, this)); addConverter(new ParserConverter(fieldType, parser, this)); } 从接口的实现可以看到这个...] 可以说Printer它可以直接转,也可以是构建在conversionService 之上 的一个转换器:只要源类型是我能处理的,或者经过conversionService后能成为我能处理的类型,都能进行转换...一般来说,我们有两种途径来达到此目的: 直接方式:写一个Person转String的转换器,专用 缺点明显:多写一套代码 组合方式(推荐):如果目前已经有Person -> Integer的了,那我们就组合起来用就非常方便啦...,因此还必须注册一个转换器,用于Integer -> Person桥接一下,这样就串起来了String -> Integer -> Person。...示例中为何强调:addConverter()注册转换器时请务必不要使用lambda表达式代替输入,会有什么问题? 这种功能组合/桥接的巧妙设计方式,你脑中还能想到其它案例

    87501
    领券