0
点赞
收藏
分享

微信扫一扫

QMT和Ptrade有什么区别?该如何选择?

九月的栩 2024-04-22 阅读 23

文章目录

写在前面


Tag

【字符串】【罗马字符】【模拟】


题目来源

13. 罗马数字转整数


解题思路

方法一:模拟

思路

这道题目不是很简答嘛,直接将罗马字符对应的数字加起来不就可以了吗!看似如此,实则考虑情况不全面。对于罗马数字中小的数字放在大的数字右边的情况,确是按照上面的思路将罗马字符转化成整数。

若存在小的数字在大的数字左边的情况,根据规则需要减去小的数字。对于这种情况,我们可以将每个字符视作一个单独的值,然后将答案减去该值。

例如 XIV \texttt{XIV} XIV 可视作 X − I + V = 10 − 1 + 5 = 14 \texttt{X}-\texttt{I}+\texttt{V}=10-1+5=14 XI+V=101+5=14

代码

class Solution {
private:
    unordered_map<char, int> hash{
        {'I', 1},
        {'V', 5},
        {'X', 10},
        {'L', 50},
        {'C', 100},
        {'D', 500},
        {'M', 1000}};
    
public:
    int romanToInt(string s) {
        int n = s.size();
        int ans = 0;
        for(int i = 0; i < n; ++i) {
            int num = hash[s[i]];
            if(i + 1 < n && num < hash[s[i+1]]) {
                ans -= num;
            }
            else{
                ans += num;
            }
        }
        return ans;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 是字符串 s 的长度。

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

举报

相关推荐

0 条评论