題目:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiIXZ05WZj91YpB3IwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cnT0kFVOlXWU5EM4wmYwhGWhxGZzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PH5EUuEzNxMTOxAjMyIzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
解法一思路:
- 先把羅馬數字轉化為整數
- 判斷條件:
- 正常:羅馬數字中小的數字在右邊,則直接做加法運算。
- 特例:羅馬數字中大的數字若在右邊的話,則需做減法運算。
- 是以,通過周遊往後看一位,判斷是做加法運算還是減法運算。
class Solution {
public int romanToInt(String s) {
int sum = 0;
int pre = getValue(s.charAt(0));
for(int i=1; i<s.length();i++){
int num = getValue(s.charAt(i));
if(pre<num){
sum -= pre;
}else{
sum += pre;
}
pre = num;
}
sum += pre; //與最後一位做加法運算
return sum;
}
public int getValue(char c){
switch(c){
case 'I':return 1;
case 'V':return 5;
case 'X':return 10;
case 'L':return 50;
case 'C':return 100;
case 'D':return 500;
case 'M':return 1000;
default:return 0;
}
}
}
參考作者:donespeak 來源:力扣(LeetCode)
注意:
測試時,在輸入需要轉化為數字的羅馬數字時,應當要考慮題目給出的特殊規則。
在解題的道路不斷掙紮…