2018-07-03 12. Integer to Roman

题意:给你一个数字,转换成罗马数字,需要遵循罗马数字排布的一些规则。
解题思路:
思路一:因为9和4比较特殊,其余的就是直接累计,可以把罗马数字分成9,5,4,1的对应表,然后逐一遍历将对应的罗马符号放入该位即可。

class Solution {
public:
    string intToRoman(int num) {
        string ans;
        
        vector<vector<string>> ivec;      
        vector<string> ivec1 = {"IX","V","IV","I"};
        vector<string> ivec2 = {"XC","L","XL","X"};
        vector<string> ivec3 = {"CM","D","CD","C"};
        vector<string> ivec4 = {"  "," ","  ","M"};
        ivec.push_back(ivec1);
        ivec.push_back(ivec2);
        ivec.push_back(ivec3);
        ivec.push_back(ivec4);
        
        int a[4] = {9, 5, 4, 1};
        int bt = 0;
        while(num){
            int n = num % 10;
            string ss;
            while(n){
                for(int i = 0; i < 4; i++){
                    //cout << a[i]  << endl;
                    if(n >= a[i]){
                        ss += ivec[bt][i];
                        n -= a[i];
                    }
                }
            }
            ans = ss + ans;
            num /= 10;
            bt++;
        }
        return ans;
    }
};

思路二:由于题目给出条件,说数字不会超过3999,直接暴力更快更准确。

class Solution {
public:
    string intToRoman(int num) {
        string a[10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        string b[10] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
        string c[10] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        string d[10] = {"", "M", "MM", "MMM", "", "", "", "", "", ""};
        return d[num/1000] + c[(num/100)%10] + b[(num/10)%10] + a[num%10]; 
    }
};

真 * 牛逼!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 8,131评论 0 1
  • 题目 Given a roman numeral, convert it to an integer. Input...
    miltonsun阅读 3,856评论 0 0
  • 很小的时候,她就对紫有一种莫名的偏爱,那时的她就知道,那种高贵、浪漫与略带神秘不是一般常人可以拥有的,从此在她的梦...
    耘儿910阅读 1,666评论 0 5
  • 薛之谦昨晚转发的一条北京地铁男子推搡并辱骂两名拉人扫码女子的视频火了。 大V表示谴责,两千万粉丝纷纷声援,事情很快...
    桃锦阅读 6,130评论 0 0
  • 早啊,今天又是早早起来去上班签到的一天,外面的天气阴沉沉的,有点冷了,秋天来了。出去的时候特地套了一件外衣,...
    一粒别扭的牙阅读 1,724评论 0 0

友情链接更多精彩内容