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

来源:互联网 发布:java中文gbk编码转换 编辑:程序博客网 时间:2024/05/22 17:14

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;    }};
原创粉丝点击