题目:https://leetcode-cn.com/problems/roman-to-integer/
答案:
class Solution {
public int romanToInt(String s) {
if(s==null || s.isEmpty()) return 0;
char[] romans = s.toCharArray();
int result=0;
for(int i=0;i<romans.length;i++){
if(i<romans.length-1){
result += cal(romans[i], romans[i + 1]);
if(isSpecial(romans[i],romans[i+1])) {
i++;
}
}else{
result+= cal(romans[i],'A');
}
}
return result;
}
public int cal(char p, char q){
int result=0;
boolean isExit = false;
if(p=='I'){
if(q=='V'){
result = 4;
isExit = true;
}else if(q=='X'){
result = 9;
isExit = true;
}
}else if(p=='X'){
if(q=='L'){
result = 40;
isExit = true;
}else if(q=='C'){
result = 90;
isExit = true;
}
}else if(p=='C'){
if(q=='D'){
result = 400;
isExit = true;
}else if(q=='M'){
result = 900;
isExit = true;
}
}
if(!isExit){
switch (p){
case 'I':
result = 1;
break;
case 'V':
result = 5;
break;
case 'X':
result = 10;
break;
case 'L':
result = 50;
break;
case 'C':
result = 100;
break;
case 'D':
result = 500;
break;
case 'M':
result = 1000;
break;
}
}
return result;
}
public boolean isSpecial(char p, char q){
boolean isExit = false;
if(p=='I'){
if(q=='V'){
isExit = true;
}else if(q=='X'){
isExit = true;
}
}else if(p=='X'){
if(q=='L'){
isExit = true;
}else if(q=='C'){
isExit = true;
}
}else if(p=='C'){
if(q=='D'){
isExit = true;
}else if(q=='M'){
isExit = true;
}
}
return isExit;
}
}