Roman to Integer
Given a roman numeral, convert it to an integer;
and 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;
右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。
代码
// rules:位于大数的后面时就作为加数;位于大数的前面就作为减数
public class Solution {
public int romanToInt(String s) {
int[] a = new int[26];
a['I' - 'B'] = 1;
a['V' - 'B'] = 5;
a['X' - 'B'] = 10;
a['L' - 'B'] = 50;
a['C' - 'B'] = 100;
a['D' - 'B'] = 500;
a['M' - 'B'] = 1000;
char prev = 'B';
int sum = 0;
for(int i = 0; i < s.length(); i++){
if(a[s.charAt(i) - 'B'] > a[prev - 'B']){
sum = sum -2*(a[prev - 'B']); //如果比前一个大则表示在左边就进行减法
}
sum = sum + a[s.charAt(i) - 'B'];
prev = s.charAt(i);
}
return sum;
}
}