1. 程式人生 > >LEEDCODE 12 Integer to Roman (JAVA題解)

LEEDCODE 12 Integer to Roman (JAVA題解)

https://leetcode.com/problems/integer-to-roman/

原題連結

題意解析:

把阿拉伯數字轉換為羅馬數字,並以字串的形式返回,阿拉伯數字的範圍為0~3999

羅馬數字有7個符號,分別是I(1),V(5),X(10),L(50),C(100),D(500),M(1000)

思路解析:

先用一個Map來記錄阿拉伯數字和羅馬數字之間的對映關係,然後,介紹一下轉換的規則

例如阿拉伯數 1 5 10 對應的羅馬數就是 I V X ,那麼

0~3 分別是 I II III  

4~8分別是 IV V VI VIII

9~10是 IX X

阿拉伯數10 50 100 對應的羅馬數是 X L C, 那麼

10,20,30分別是 X XX XXX

40,,50,60,70,80分別是 XL L LX LXX LXXX

90,100是 XC C

相信大家已經抓到規律了

首先,我們要得到某個位上的數字,然後根據得到的數字分三種情況討論

例如2046,我們首先要得到2,2是第一種情況,接著,根據它的數量級,確定它的羅馬數字符號,在這裡,是MM

數量級為100的位上,對應的數字為0,不用管

數量級為10的位上,對應的數字為4,第二種情況,XL,

。。。。。。

題解程式碼:

<span style="font-size:24px;">public String intToRoman(int num) {
        StringBuffer result=new StringBuffer();
        
        Map roaMap=new HashMap<Integer,String>();
        roaMap.put(1,"I");
        roaMap.put(5,"V");
        roaMap.put(10,"X");
        roaMap.put(50,"L");
        roaMap.put(100,"C");
        roaMap.put(500,"D");
        roaMap.put(1000,"M");
        
        int count=0;
        int pos=1000;
        do{
            count=num/pos;
            if(count<=3){
                for(int i=0;i<count;i++){
                    result.append((String)roaMap.get(pos));
                }
            }else if(count==9){
                result.append((String)roaMap.get(pos)+(String)roaMap.get(pos*10));
            }else{
                for(int i=0;i<5-count;i++){
                    result.append((String)roaMap.get(pos));
                }
                result.append((String)roaMap.get(pos*5));
                for(int i=0;i<count-5;i++){
                    result.append((String)roaMap.get(pos));
                }
            }
            num%=pos;
            pos/=10;
        }while(num>0);
        
        return result.toString();
    }</span>