LeetCode:Integer to Roman[M]

我現(xiàn)在在做一個叫《leetbook》的開源書項目康震,把解題思路都同步更新到github上了妙黍,需要的同學(xué)可以去看看
地址:https://github.com/hk029/leetcode
這個是書的地址:https://hk029.gitbooks.io/leetbook/

這里寫圖片描述
  1. Integer to Roman[M]

問題

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

思路

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000

分析羅馬數(shù)字的規(guī)律:

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000

上面是羅馬數(shù)字所有的符號作媚。
羅馬數(shù)字的規(guī)則:
一般情況下随珠,從左到右從大到小排补疑,字母代表的數(shù)字累加瘦馍。
比如:

XII = 12
MDCCLXVI= 1000+500+100+100+50+10+5+1

但是有特殊情況,就是腌零,如果數(shù)字的范圍在大數(shù)減小數(shù)的范圍內(nèi)梯找,則會出現(xiàn)小數(shù)在大數(shù)前面的情況,代表(大數(shù)-小數(shù))

IV = 5-1
IX= 10 - 1 = 9
XL = 50-10 = 40

Symbol Value
IV 4
IX 9
XL 40
XC 90
CD 400
CM 900

思路1——循環(huán)

一旦把所有可能的情況符號情況都列舉出來了益涧,就好做了锈锤。
我們現(xiàn)在拿到一個數(shù)N

  1. 我們就去表里面找不超過它的最大的數(shù)x,
  2. 然后把它入我們的輸出字符串中闲询,然后將數(shù)N-=x久免,
  3. 繼續(xù)執(zhí)行這個操作,直到N=0
public class Solution {
    public String intToRoman(int num) {
        int list[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
        String chars[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int i = 0;
        String out="";
        while(num > 0)
        {
            for(;i < list.length;i++)
                if(num >= list[i])
                    break;
            out+=chars[i];
            num -= list[i];
        }
        return out;
    }
}

思路2——查表

還有個更極端的方案扭弧,就是阎姥,把每位上可能出現(xiàn)的情況都列舉出來,剩下的鸽捻,只用查表就行了呼巴。

public class Solution {
  public static String intToRoman(int num) {
        String M[] = {"", "M", "MM", "MMM"};
        String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
        String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市御蒲,隨后出現(xiàn)的幾起案子衣赶,更是在濱河造成了極大的恐慌,老刑警劉巖厚满,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件府瞄,死亡現(xiàn)場離奇詭異,居然都是意外死亡碘箍,警方通過查閱死者的電腦和手機遵馆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敲街,“玉大人团搞,你說我怎么就攤上這事《嗤В” “怎么了逻恐?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長峻黍。 經(jīng)常有香客問我复隆,道長,這世上最難降的妖魔是什么姆涩? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任挽拂,我火速辦了婚禮,結(jié)果婚禮上骨饿,老公的妹妹穿的比我還像新娘亏栈。我一直安慰自己台腥,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布绒北。 她就那樣靜靜地躺著黎侈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闷游。 梳的紋絲不亂的頭發(fā)上峻汉,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音脐往,去河邊找鬼休吠。 笑死,一個胖子當(dāng)著我的面吹牛业簿,可吹牛的內(nèi)容都是我干的瘤礁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼梅尤,長吁一口氣:“原來是場噩夢啊……” “哼蔚携!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起克饶,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎誊辉,沒想到半個月后矾湃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡堕澄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年邀跃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛙紫。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拍屑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坑傅,到底是詐尸還是另有隱情僵驰,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布唁毒,位于F島的核電站蒜茴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浆西。R本人自食惡果不足惜粉私,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望近零。 院中可真熱鬧诺核,春花似錦抄肖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陈瘦,卻和暖如春幌甘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痊项。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工锅风, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞍泉。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓皱埠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咖驮。 傳聞我的和親對象是個殘疾皇子边器,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容