C++ leetcode刷题复盘4: roman_to_int

参考资料:https://blog.csdn.net/magicdoubi/article/details/86561355
相关知识:
1.string数据调用
2.break用法

解法一

考虑高位数值小于相邻低位数值时,高位数值符号为负。

class Solution {
public:
    int romanToInt(string s) {
    char r[7]={'I','V','X','L','C','D','M'};
    int n[7]={1,5,10,50,100,500,1000};
    int res = 0;
    for (int j = 0; j < s.length(); j++)
    {
        int num = 0;
        int i = 0;
        int lastn = 0;
        for (i = 0; i < 8; i++)
        {
            if (s[j]==r[i]){
                num = n[i];
                break;
                }
        }

        if(j>0){
            for (lastn = 0; lastn < 8; lastn++)
            {
                if(s[j-1]==r[lastn]){
                    break;
                }
            }
            
        }
        if(j>0 && n[lastn]<n[i] && i>0 ){
            res= res-2*n[lastn];//如果高位数值低于地位,则减去两个高位数值使其符号为负
        }
        res = res + n[i];//对于所有的字符先加一遍
        //printf("num=%d;j=%d,i=%d;",num,j,i);
    }    
    return res;
    }
};

运行速度:
在这里插入图片描述

踩坑

1.break:当前循环终止。
2.continue:当前迭代终止,继续循环。
3.试图用unordered_map函数,但是由于没能成功建立<int, char>失败了。基础好差啊,好难过。

猜你喜欢

转载自blog.csdn.net/Amberfd/article/details/112398626