当前位置: 首页> 财经> 股票 > Leetcode:罗马数字转整数

Leetcode:罗马数字转整数

时间:2025/7/14 10:22:03来源:https://blog.csdn.net/m0_73975164/article/details/139429533 浏览次数:0次

题目链接:13. 罗马数字转整数 - 力扣(LeetCode)

普通版本(模拟)

分析:通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,累加每个字符对应的数值即可(XXVII 可视作 X+X+V+I+I=10+10+5+1+1=27);若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字(XIV 可视作 X−I+V=10−1+5=14)

结论:当前位置表示的元素的值 < 下个位置表示的元素的值,就用总数减去当前位置的值(小的在左),否则总数加上当前位置的值(小的在右)

class Solution {
private:unordered_map<char, int> symbolValues = {{'I', 1},{'V', 5},{'X', 10},{'L', 50},{'C', 100},{'D', 500},{'M', 1000},};public:int romanToInt(string s) {int ans = 0;//最终结果int n = s.length();for (int i = 0; i < n; ++i) {int value = symbolValues[s[i]];//value表示当前位置上的字符,[]返回值是键对应的值的引用if (i < n - 1 && value < symbolValues[s[i + 1]])//前一个字符和后一个字符进行比较,因此i表示的位置不能是n-1{ans -= value;//当前位置的元素比下个位置的元素小,就减去当前值,否则加上当前值}else {ans += value;}}return ans;}
};

时间复杂度:O(N)

空间复杂度:O(1) 

注意事项:记得查看unordered_map的使用方式,[]的传入值与返回值,unordered_map的初始化及插入方式C++的map和set-CSDN博客

~over~

关键字:Leetcode:罗马数字转整数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: