整数へのタイトル13、ローマ数字

整数へのタイトル13、ローマ数字

タイトル

次の7つを含むローマ数字文字:I、V、X、L、C、D及びM.

文字 数の
1
V 5
バツ 10
L 50
C 100
D 500
M 1000年

例えば:IIとして書き込まローマ数字2、X + IIである二つの平行1.12 XII、として書かなければなりません。図27は、XXVII、即ちXX + V + IIのように書きます。

一般的に、大量に右にローマ数字の数が少ないです。しかし、例外もある、例えば、4 IIIIを書きますが、IVはありません。左番号5番号1において、多数の数が4を得た少ない数5で表される値に等しいです。同様に、数9は、IXで表されます。この特別なルールは以下の6つのケースにのみ適用されます。

私は、左V(5)とX(10)上にあってもよく、及び4,9を表現します。
X Lは、左(50)及びC(100)上に配置することができ、そして40と90が示されています。
Cは、400と900表すために、左側にD(500)とM(1000)上に配置することができます。
整数に変換するために、ローマ数字を考えます。入力は3999から1の範囲にあることを保証します。

思考

より高速になるマップテーブルを使用しようと思っていたが、その結果は、時間と空間の種類に裁判官にないとして、直接テーブルの初期化をマップに起因するかもしれませんが、。そして、私たちはそれを最適化するために行く時間を持っています。

考え

import java.util.HashMap;

public class T013 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println( romanToInt( "III" ) );		//3
		System.out.println( romanToInt( "IV" ) );		//4
		System.out.println( romanToInt( "IX" ) );		//9
		System.out.println( romanToInt( "LVIII" ) );	//58
		System.out.println( romanToInt( "MCMXCIV" ) );	//1994
	}
	
    public static int romanToInt(String s) {
    	
        HashMap<String, Integer> map = new HashMap<String, Integer >();
        
        map.put( "M", 1000 );
        map.put( "CM", 900 );
        map.put( "D", 500 );
        map.put( "CD", 400 );
        map.put( "C", 100 );
        map.put( "XC", 90 );
        map.put( "L", 50 );
        map.put( "XL", 40 );
        map.put( "X", 10 );
        map.put( "IX", 9 );
        map.put( "V", 5 );
        map.put( "IV", 4 );
        map.put( "I", 1 );
        
		if( s.length() > 1 && map.containsKey( s.substring(0, 2) ) )
			return map.get( s.substring(0, 2) ) + romanToInt( s.substring(2) );
		else if( s.length() > 0 && map.containsKey( s.substring(0, 1) ) )
			return map.get( s.substring(0, 1) ) + romanToInt( s.substring(1) );
		else if( map.containsKey( s ) )
			return map.get( s.substring(0, 1) );
		else
			return 0;
    }
}
公開された25元の記事 ウォンの賞賛0 ビュー121

おすすめ

転載: blog.csdn.net/weixin_45980031/article/details/103466004