トピック:
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています。
キャラクター | 値 |
---|---|
私 | 1 |
V | 5 |
バツ | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
たとえば、ローマ数字2はIIと表記され、2つの平行な1を意味します。12はXIIと表記され、X + IIを意味します。27はXXVII、つまりXX + V + IIと表記されます。
通常、ローマ数字の小さい数字は大きい数字の右側にあります。ただし、特殊なケースがあります。たとえば、4はIIIIではなくIVと記述されます。番号1は番号5の左側にあり、表されている番号は、大きい番号5から番号1を引いた番号4と同じです。同様に、番号9はIXとして表されます。この特別なルールは、次の6つの状況にのみ適用されます。
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
問題解決のアイデア:
1。質問の意味から、大きい数字が左側にあり、小さい数字が右側にある場合、それは数字の間の加算を意味し、小さい数字が左側にある場合、その逆を意味します。 trueは、減算を意味します。
2文字列内の個々の文字を1つずつ取り出し、スイッチを使用してローマ数字をエスケープし
ます。3。次に、左右の数字のサイズを比較して加算と減算を判断し、最終結果を取得します。
コードは以下のように表示されます
class Solution {
//1大的数字在左边则为加,小的数字在左边则为减
public int romanToInt(String s) {
int result = 0;
int beginNum = huoQu(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
int num = huoQu(s.charAt(i));
if(beginNum < num){
result-=beginNum;
}else {
result+=beginNum;
}
beginNum = num;
}
result+=beginNum;
return result;
}
public static int huoQu(char a){
switch (a){
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;
}
}
}
効果は次のとおりです。