[LeetCode] 12. Integer to Roman

整数转换罗马数字。13题是正好相反。

题意是给一个整数,请把它转换成罗马数字。规则如下,

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例子,

Example 1:

Input: 3
Output: "III"

Example 2:

Input: 4
Output: "IV"

Example 3:

Input: 9
Output: "IX"

Example 4:

Input: 58
Output: "LVIII"
Explanation: L = 50, V = 5, III = 3.

Example 5:

Input: 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

这个题不涉及什么算法或者思想,只是单纯的转换。我给出一个我个人觉得比较好记的做法。先给出每个罗马数字和他们对应的整数之间的mapping,然后对于要处理的整数X,找到最大的小于X的对应的罗马数字。因为是JavaScript,所以这里可以直接拼接字符串而不用像Java那样先创建StringBuilder(12行)。

时间O(n)

空间O(n)

 1 /**
 2  * @param {number} num
 3  * @return {string}
 4  */
 5 var intToRoman = function (num) {
 6     var list = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
 7     var valueList = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
 8     var res = '';
 9     while (num !== 0) {
10         for (var i = 0; i < valueList.length; i++) {
11             if (num >= valueList[i]) {
12                 res += list[i];
13                 num -= valueList[i];
14                 break;
15             }
16         }
17     }
18     return res;
19 };

猜你喜欢

转载自www.cnblogs.com/aaronliu1991/p/12239483.html