一、Integer to Roman
public static String intToRoman(int num) {
String M[] = {"", "M", "MM", "MMM"};
String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}
将个、十、百位数的所有字符串写出来,存储在一个长度为10的数组中,把千位数所对应的字符串存储在长度为4的数组中。计算千分百十位对应的数组,然后寻找对应的字符串。
二、Roman to Integer
class Solution {
public:
int romanToInt(string s) {
int res = 0;
for (int i = s.length() - 1; i >= 0; i--) {
char c = s[i];
switch (c) {
case 'I':
res += (res >= 5 ? -1 : 1);
break;
case 'V':
res += 5;
break;
case 'X':
res += 10 * (res >= 50 ? -1 : 1);
break;
case 'L':
res += 50;
break;
case 'C':
res += 100 * (res >= 500 ? -1 : 1);
break;
case 'D':
res += 500;
break;
case 'M':
res += 1000;
break;
}
}
return res;
}
};
对输入的字符串,从右向左遍历,但是I、X、C可能为正,也可能为负,当I出现在V、X左边,当X出现在L、C左边,当C出现在D、M左边时,都为负数。所以要进行判定。