12. Integer to Roman
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
把数字转化成罗马数字(不知转换规则,百度吧)
public String intToRoman(int num) {
String str = "";
String[] symbol = { "M", "CM", "D", "CD", "C",
"XC", "L", "XL", "X", "IX", "V", "IV", "I" };
int[] value = { 1000, 900, 500, 400, 100,
90, 50, 40, 10, 9, 5, 4, 1 };
for (int i = 0; num != 0; i++) {
while (num >= value[i]) {
num -= value[i];
str += symbol[i];
}
}
return str;
}
13. Roman to Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
把罗马数字转化数字
基本字符:
I、V、X、L、C、D、M
相应的阿拉伯数字表示为:
1、5、10、50、100、500、1000
(1)相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
(2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
(3)小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
思路如下:
从左边第一个数字开始,依次加,因为有(3)的情况的存在,
加过以后判断,要是存在(3)的情况,就减去前一个(i-1)*2,因为本来应该减去前面这个小的数, 但是上次一循环还加了一次,于是这次就减去2次。
public int romanToInt(String s) {
if (s == null || s.length() == 0)
return 0;
HashMap<Character, Integer> map = new HashMap<>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
// 使用s.toCharArray()后使用char数组在计算会TLE
int value = map.get(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
if (map.get(s.charAt(i)) > map.get(s.charAt(i - 1))) {
value = value + map.get(s.charAt(i))
- 2 * map.get(s.charAt(i - 1));
} else {
value = value + map.get(s.charAt(i));
}
}
return value;
}