#13 Roman to Integer
這題要考的是對規則的理解、以及對字串的處理。
Concept:
首先,羅馬數字共有7個 - Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。所有數字都是由這7個構成的。
兩個相鄰的羅馬數字,若右邊的比左邊的大,代表右邊減掉左邊的阿拉伯數字。
e.g. IV -> 4
讀進s之後,先將s的每個char都對應到阿拉伯數字,
存入char[] num,
再依序讀num,若num[i]<num[i-1],表示num[i]要被減掉,反之,要加上去。
完整程式碼:
public class Solution {
public int romanToInt(String s) {
//1 ~ 10 : I, II, III, IV, V, VI, VII, VIII, IX, X
//20 ~ 100: XX XXX XL L LX LXX LXXX XC C
//200~900 : CC CCC CD D DC DCC DCCC CM
//1000 : M
//declare an integer ans=0 to save answer
//declare an int array num, size = s.length(), to save conversion of each character
//for loop through s, use switch statements to convert roman to decimal. save decimal number of each character in num
//for loop through num, if num[i]>=num[i+1], ans+=num[i], else ans -= num[i]
int ans =0;
int[] num = new int[s.length()];
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
switch(c){
case 'I':
num[i] = 1;
break;
case 'V':
num[i] = 5;
break;
case 'X':
num[i] = 10;
break;
case 'L':
num[i] = 50;
break;
case 'C':
num[i] = 100;
break;
case 'D':
num[i] = 500;
break;
case 'M':
num[i] = 1000;
break;
}
}
for(int j=0; j<num.length-1; j++){
if(num[j] >= num[j+1])
ans += num[j];
else
ans -= num[j];
}
ans += num[num.length-1];
return ans;
}
}