Likou13-ローマ数字から整数

トピック:

ローマ数字には、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;
        }
    }
    }

効果は次のとおりです。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_42898315/article/details/108395412