Leetcode -- Integer to Roman

题目:

Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.

分析:罗马数字,转到阿拉伯数字是相当有规律的。比如9 -- IX, 90 -- XC, 99  -- XCIX

思路:map形式,将所有特殊的都存储起来,然后在直接通过key获取相应的值。

代码:

string intToRoman(int num) {
        map <int, map<int, string>>map1;  
        map1[10][1] = "I";
        map1[10][2] = "II";
        map1[10][3] = "III";
        map1[10][4] = "IV";
        map1[10][5] = "V";
        map1[10][6] = "VI";
        map1[10][7] = "VII";
        map1[10][8] = "VIII";
        map1[10][9] = "IX";
        
        map1[100][1] = "X";
        map1[100][2] = "XX";
        map1[100][3] = "XXX";
        map1[100][4] = "XL";
        map1[100][5] = "L";
        map1[100][6] = "LX";
        map1[100][7] = "LXX";
        map1[100][8] = "LXXX";
        map1[100][9] = "XC";
        
        map1[1000][1] = "C";
        map1[1000][2] = "CC";
        map1[1000][3] = "CCC";
        map1[1000][4] = "CD";
        map1[1000][5] = "D";
        map1[1000][6] = "DC";
        map1[1000][7] = "DCC";
        map1[1000][8] = "DCCC";
        map1[1000][9] = "CM";
        
        map1[10000][1] ="M";
        map1[10000][2] = "MM";
        map1[10000][3] = "MMM";
        
        int a = 10;
        int b;
        string s = "";
        while(num)
        {
            b = num%10;
            if(b != 0)
            {
                s = map1[a][b] + s;
            }
            num = num/10;
            a = a * 10;
        }
        return s;
    }


更为简单的解法(网上抄的-_-):

  1.  public String intToRoman(int number) {  
  2.         int[] values = {1000900500400100905040109541 };  
  3.         String[] numerals = {"M""CM""D""CD""C""XC""L""XL""X""IX""V""IV""I" };  
  4.         StringBuilder result = new StringBuilder();  
  5.         for (int i = 0; i < values.length; i++) {  
  6.             while (number >= values[i]) {  
  7.                 number -= values[i];  
  8.                 result.append(numerals[i]);  
  9.             }  
  10.         }  
  11.         return result.toString();  
  12.     }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值