LEEDCODE 12 Integer to Roman (JAVA題解)
阿新 • • 發佈:2019-01-01
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>