LeetCode13、ローマ数字は整数に変換されます

記事ディレクトリ

タイトル説明

  1. ローマ数字から整数へ
    ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています。

文字値
I 1
V 5
X 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つの状況にのみ適用されます。

V(5)とX(10)の左側に配置して、4と9を表すことができます。
XはL(50)とC(100)の左側に配置して、40と90を表すことができます。
Cは、D(500)とM(1000)の左側に配置して、400と900を表すことができます。
ローマ数字を与え、それを整数に変換します。入力が1から3999の範囲であることを確認してください。

例1:

入力:「III」
出力:3
例2:

入力: "IV"
出力:4
例3:

入力: "IX"
出力:9
例4:

入力: "LVIII"
出力:58
説明:L = 50、V = 5、III = 3
例5:

入力: "MCMXCIV"
出力:1994
説明:M = 1000、CM = 900、XC = 90、IV = 4。

促す:

質問で与えられたテストケースはすべてローマ数字の書き込み規則に準拠しており、クロスビットはありません。
ICやIMなどの例はタイトルの要件を満たしていません。49はXLIX、999はCMXCIXとして記述してください。
ローマ数字の書き方の詳細については、ローマ数字-数学を参照してください。
合格250,382提出済み403,078

直接的な思考

前回と同じように、つまり整数をローマ数字に変換するために、貪欲な心を使って毎回最大の一致を見つけました。文字種が限られているため。

class Solution {
    
    
    public int romanToInt(String s) {
    
    
        if(s==null||s.length()==0){
    
    
            return 0;
        }
        String [] str = new String[]{
    
    "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int[]nums = new int[]{
    
    1000,900,500,400,100,90,50,40,10,9,5,4,1};
        int start= 0,res=0;
        for(int i=0;i<str.length;i++){
    
    
            int dlt = str[i].length();
            while((start+dlt<=s.length())&&s.substring(start,start+dlt).equals(str[i])){
    
    //需要重复匹配。如MMM的情况
                res+=nums[i];
                start+=dlt;
            }
        }
        return res;

    }
}

ここに画像の説明を挿入
複雑さの分析:
時間の複雑さ:O(1)、これは制限された操作であるため。
空間の複雑さ:O(1)、私たちは皆、開かれた空間を使用します。

おすすめ

転載: blog.csdn.net/qq_44861675/article/details/108437912