Integer to Roman

Integer to Roman

问题:

Given an integer, convert it to a roman numeral.

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

思路:

  映射方法-->等长数组

我的代码:

public class Solution {
    public String intToRoman(int num) {
        int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };  
        String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };  
        StringBuffer rst = new StringBuffer();
        int len = values.length;
        for(int i = 0; i < len; i++)
        {
           int count = num/values[i];
           num = num % values[i];
           for(int j = 0; j < count; j++)
           {
               rst.append(numerals[i]);
           }
        }
        return rst.toString();
    }
}
View Code

别人代码:

public class Solution {
    public String intToRoman(int num) {
        if(num <= 0) {
            return "";
        }
        int[] nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        StringBuilder res = new StringBuilder();
        int digit=0;
        while (num > 0) {
            int times = num / nums[digit];
            num -= nums[digit] * times;
            for ( ; times > 0; times--) {
                res.append(symbols[digit]);
            }
            digit++;
        }
        return res.toString();
    }
}
View Code

学习之处:

  • 变量命名 times remain
  • 转化的根本在于映射,常见的映射方法 1、map 2、等长数组

need to learn

原文地址:https://www.cnblogs.com/sunshisonghit/p/4315906.html