原題鏈接: 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; ArrayListdigits = 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 題目思路很簡單,主要就是考察一下對於整數和字符串的操作,屬於比較基本的題目。