Description:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
Solution:
这道题目就是要求对于罗马数字要有了解(其实我也是看了其他人的写法才知道的( ▼-▼ ))
主要是1,4,5,9,10,40,50,90……每个位数上面的1,4,5,9对应的写法不一样
Description:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Solution:
和上面一样,每次读取一个字符,如果当前字符比前一个大,那么就把前面加上的val值减去两倍,然后再加上当前的val。
public class Solution {
public String intToRoman(int num) {
String[] symbols = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X",
"IX", "V", "IV", "I" };
int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
StringBuilder ret = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (num >= values[i]) {
ret.append(symbols[i]);
num -= values[i];
}
}
return new String(ret);
}
public int romanToInt(String s) {
int ret = 0;
int n = s.length();
for (int i = 0; i < n; i++) {
if (i > 0 && match(s.charAt(i - 1)) < match(s.charAt(i))) {
ret = ret - 2 * match(s.charAt(i - 1)) + match(s.charAt(i));
} else {
ret += match(s.charAt(i));
}
}
return ret;
}
public int match(char a) {
switch (a) {
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
default:
return 0;
}
}
}