LeetCode-13. 罗马数字转整数

解题思路:观察发现,特殊的规则适用的六种情况都是两个字符中左边的字符小于右边的字符,且结果等于右边的字符代表的数减左边字符代表的数。 比如 IV 等于 V-I 即5-1=4,XL等于L-X 即50-10=40

因此,我们将 字符char:数值int 存在 Roman2Int 的哈希表中。然后从左到右遍历每个字符,如果 s[i] < s[i+1],就将结果减去 s[i] 代表的数字;否则,将结果加上 s[i] 代表的数字。 map和unordered_map都行 如III等于I+I+I,最后一步会加上最左边的数!

class Solution {
          
   
public:
    int romanToInt(string s) {
          
   
        int result=0;
        map<char,int> luoMa={
          
   
            {
          
   I,1},
            {
          
   V,5},
            {
          
   X,10},
            {
          
   L,50},
            {
          
   C,100},
            {
          
   D, 500},
            {
          
   M, 1000}
        };//初始化哈希表
        for(int i=0;i<s.length();i++)
        {
          
   
            if(luoMa[s[i]] < luoMa[s[i+1]])
                result -= luoMa[s[i]];//如果左边小于右边则结果减去左边的数如IV=V-I
            else
            {
          
   
                result += luoMa[s[i]];//左边大于等于右边则结果加上左边
            }
        }
        return result;
    }
};

复杂度分析 时间复杂度:O(N)。遍历了一遍数组。 空间复杂度:O(1)。使用了 Int。

经验分享 程序员 微信小程序 职场和发展