【LeetCode】13. Roman to Integer && 12. Integer to Roman

13. Roman to Integer

介绍

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

解答

class Solution {
public:

    // 在保证输入内容合法的情况下,如下操作进行Roman 到 Int的转换
    int romanToInt(string s) {
        if(s.empty())   return 0;
        unordered_map<char,int> romToInt{{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000},};
        int i = 0; 
        int res = 0;
        while(i < s.size()-1)
        {
            if(romToInt[s[i]] >= romToInt[s[i+1]])
            {
                res += romToInt[s[i]];
                ++i;
            }else
            {
                res += romToInt[s[i+1]] - romToInt[s[i]];
                i += 2;
            }
        }
        if(i == s.size() - 1)   {res += romToInt[s[i]];}
        return res;

    }
};

12. Integer to Roman

介绍

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

解答

class Solution {
public:
    string intToRoman(int num) {
        vector<pair<char,char>> romans; 
        romans.push_back(make_pair('I','V'));
        romans.push_back(make_pair('X','L'));
        romans.push_back(make_pair('C','D'));
        romans.push_back(make_pair('M','M'));

        string res;
        int base = 1000, index = 3;
        while(index >= 0)
        {
            int val = num/base;
            switch(val)
            {
                case(1): case(2):case(3):
                {
                    while(val-- > 0) res.push_back(romans[index].first);
                    break;
                }
                case(4):
                {
                    res.push_back(romans[index].first);
                    res.push_back(romans[index].second); 
                    break;
                }
                case(5):
                {
                    res.push_back(romans[index].second);
                    break;
                }
                case(6): case(7): case(8):
                {
                    res.push_back(romans[index].second); 
                    val -= 5; 
                    while(val-- > 0) res.push_back(romans[index].first); 
                    break;
                }
                case(9):
                {
                    res.push_back(romans[index].first);
                    res.push_back(romans[index+1].first);
                }
                default:    break;
            }
            num = num % base;
            base = base/10;
            --index;
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值