題目:ide
Given an integer, convert it to a roman numeral. idea
Input is guaranteed to be within the range from 1 to 3999.spa
題解:
.net
這道題。。還有哪一個roman to integer。。第一件事 就是先把roman認全吧。。code
羅馬數字拼寫規則(轉自Wikipedia:http://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97):blog
羅馬數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。按照下述的規則能夠表示任意正整數。須要注意的是羅馬數字中沒有「0」,與進位制無關。通常認為羅馬數字只用來記數,而不做演算。遞歸
根據上述規則,咱們能夠發現兩條對解這道題有幫助的內容:ip
有以上三個內容咱們能夠發如今減數的時候有特定的規律,就是隻能減1位且不能跨越一個位數,同時只限於I X C。
leetcode
像上面那個例子,99 不能用IC(100-1)表示,是由於若是一個數字超過90(或等於90),其羅馬數字的表示就必須包含一個XC(100-10)。get
同理,對I X C都適用這個原則。
這個判斷,要從最大往下找,若是一個數字是5,那麼他就是屬於大於等於5,羅馬數字包含V,而無需寫成IIIII。
因此,遞歸的,代碼能夠寫成以下(代碼源自leetcode discussion):
非遞歸的寫法以下,道理同樣:
Reference:http://blog.csdn.net/havenoidea/article/details/11848921