Title:Roman to Integer 13
Difficulty:Easy
原题leetcode地址:https://leetcode.com/problems/roman-to-integer/
1. 从后到前开始遍历,前面的数小于当前数,就减去前面的数,否则就相加
时间复杂度:O(n),一次一层for循环,需要遍历整个数组。
空间复杂度:O(n),将string转换成char数组。
/**
* 从后到前开始遍历,前面的数小于当前数,就减去前面的数,否则就相加
* @param s
* @return
*/
public static int romanToInt(String s) {
if (s.length() == 0) {
return 0;
}
char sChar[] = s.toCharArray();
int total = charRomanToInt(sChar[sChar.length - 1]);
for (int i = sChar.length - 2; i >= 0; i--) {
int tmp = charRomanToInt(sChar[i]);
int tmp2 = charRomanToInt(sChar[i + 1]);
if (tmp < tmp2) {
total -= tmp;
}
else {
total += tmp;
}
}
return total;
}
/**
* 单个罗马字符转换成整数
* @param c
* @return
*/
private static int charRomanToInt(char c) {
int romanToInt = 0;
switch (c) {
case 'I':
romanToInt = 1;
break;
case 'V':
romanToInt = 5;
break;
case 'X':
romanToInt = 10;
break;
case 'L':
romanToInt = 50;
break;
case 'C':
romanToInt = 100;
break;
case 'D':
romanToInt = 500;
break;
case 'M':
romanToInt = 1000;
break;
}
return romanToInt;
}