【JAVA、C++】LeetCode 012 Integer to Roman

Given an integer, convert it to a roman numeral.

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

本题思路比较简单,难度主要集中在罗马数字本身,直接贴代码。

思路一,从高位开始:

JAVA:

	static public String intToRoman(int number) {
		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" };
		//不推荐用String类型,因为+的本质是建立StringBuilder()的过程
		StringBuilder result = new StringBuilder();
		for (int i = 0; i < values.length; i++) {
			while (number >= values[i]) {
				number -= values[i];
				result.append(numerals[i]);
			}
		}
		return new String(result);
	}

 C++:

 1 class Solution {
 2 public:
 3     string intToRoman(int num) {
 4         vector<int> values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
 5         string numerals[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X","IX", "V", "IV","I" };
 6         string res;
 7         for (int i = 0; i < values.size(); i++) 
 8             while (num >= values[i]) {
 9                 num -= values[i];
10                 res+=numerals[i];
11             }
12         return res;
13     }
14 };

 

 

思路二,从低位开始:

JAVA:

static public String intToRoman(int num) {
        String Roman[][] = {
                {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
                {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
                {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
                {"", "M", "MM", "MMM"}
        };
        StringBuilder result = new StringBuilder();
        for(int i=0;i<Roman.length;i++,num/=10)
            result.insert(0,Roman[i][num % 10]);
        return new String(result);
    }

 

posted @ 2015-04-29 09:23  TonyLuis  阅读(153)  评论(0编辑  收藏  举报