原題鏈接: http://oj.leetcode.com/problems/integer-to-roman/
這道題比較簡單,只要搞清楚每個數字在每個位置應該如何表示就可以,羅馬數字對於每個位有三個單位:1,5,10,對於1到9,表示方法如下:
1-3:用1表示;
4:1:5左邊加一個1;
5: 直接用5表示;
6-8: 5右邊加相應的1;
9: 10左邊加一個1。
以下的代碼用一個函數來對某一個位用相應的1,5,10進行轉換,然後求出每一位依次轉換得到結果,因為知道不會超過4000,所以直接求4位出來,算法時間復雜度是O(整數的位數),空間復雜度是O(1)。 代碼如下:
public String intToRoman(int num) {
//I 1
//V 5
//X 10
//L 50
//C 100
//D 500
//M 1,000
if(num<1 || num>3999)
return "";
int digit = 1000;
ArrayList digits = new ArrayList();
while(digit>0)
{
digits.add(num/digit);
num %= digit;
digit /= 10;
}
StringBuilder res = new StringBuilder();
res.append(convert(digits.get(0),'M',' ', ' '));
res.append(convert(digits.get(1),'C','D', 'M'));
res.append(convert(digits.get(2),'X','L', 'C'));
res.append(convert(digits.get(3),'I','V', 'X'));
return res.toString();
}
public String convert(int digit, char one, char five, char ten)
{
StringBuilder res = new StringBuilder();
switch(digit)
{
case 9:
res.append(one);
res.append(ten);
break;
case 8:
case 7:
case 6:
case 5:
res.append(five);
for(int i=5;i題目思路很簡單,主要就是考察一下對於整數和字符串的操作,屬於比較基本的題目。