2019-07-17

2123 ワード

LeetCode-(1)-単純-ローマ数字回転整数
自分のテーマと知識の整理を始めました~~~~~~~~~~~~~~~~~~~
1.タイトルの説明
LeetCode-ローマ数字回転整数
ローマ数字には、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はIIIではなく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~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.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/roman-to-integer著作権はインターネットの所有に帰属する.
2.考え方
この題目を見た当初から文字列を配列に分解して遍歴しようと考えていたのですが、2文字のローマ数字が条件判断をしていて、自分でifで1つずつ判断しようと考えていたので、この案を否定して、比較する条件が多すぎて、その後はMapでローマ数字と対応するアラビア数字を保存しようとしたのですが、条件を比較すると、より簡略化されます.
1.2つのローマ字である場合、その2つのローマ字に対応するvalueが空であるかどうかを判断し、空でない場合、結果値を累積し、反復して次のスケールを加えてcontinueを終了する.
2.1つのローマ文字の場合、1つのローマ文字に対応するvalueを加算します.
3.コード

public class StringInitial {

    HashMap enumMap = new HashMap();
    {
        
        
        enumMap.put("IV",4);
        enumMap.put("IX",9);
        enumMap.put("XL",40);
        enumMap.put("XC",90);
        enumMap.put("CD",400);
        enumMap.put("CM",900);
        enumMap.put("I",1);
        enumMap.put("V",5);
        enumMap.put("X",10);
        enumMap.put("L",50);
        enumMap.put("C",100);
        enumMap.put("D",500);
        enumMap.put("M",1000);
    }
    
    public Integer change(String str) {
        String[] strs = str.split("");
        int result = 0;
        for (int i = 0; i < strs.length; i++) {
            if(i

LeeCodeのテーマの问题解はもっと简単で効率的な书き方がたくさんあります.考え方は同じです.自分で书いた后、考え方と问题解の考え方が一致していることに気づきました.