描述
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV.
Because the one is before the five we subtract it making four. The same
principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
Ican be placed beforeV(5) andX(10) to make 4 and 9.Xcan be placed beforeL(50) andC(100) to make 40 and 90.Ccan be placed beforeD(500) andM(1000) to make 400 and 900.
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
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.思路
和vivo的数位之积一样,是先从大的内容开始分解。不同之处在于,这个是减法,而数位之积是除法。
出去题目中给出的,四个连续的相同字符也要转换为减法表达的形式。要在数组加上对应的项,再直接遍历即可。
class Solution {
public String intToRoman(int num) {
//设置对应的参考数值
int[] value = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] symbol = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
StringBuffer temp = new StringBuffer();
int i = 0;
//当分解后的数字不为0时,继续分解。
while(num != 0){
if(num >= value[i]){
temp.append(symbol[i]);
num = num - value[i];
}else{
//当前值无法作为成分时,使用下一个值
i++;
}
}
return temp.toString();
}
}本题的难点在于找到完整的参考值序列。