leetcode.字符串.12整數轉羅馬數字-Java

1. 具體題目數組

羅馬數字包含如下七種字符: I, V, X, L,C,D 和 M。app

I    1
V    5
X   10
L     50
C    100
D    500
M   1000
例如, 羅馬數字 2 寫作 II ,即爲兩個並列的 1。12 寫作 XII ,即爲 X + II 。 27 寫作  XXVII, 即爲 XX + V + II 。spa

一般狀況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫作 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減少數 1 獲得的數值 4 。一樣地,數字 9 表示爲 IX。這個特殊的規則只適用於如下六種狀況:code

I 能夠放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 能夠放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。 
C 能夠放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個整數,將其轉爲羅馬數字。輸入確保在 1 到 3999 的範圍內。component

示例 1:  輸入: 3     輸出: "III"blog

示例 2:  輸入: 4    輸出: "IV"字符串

示例 3:  輸入: 9      輸出: "IX"class

示例 4:  輸入: 58    輸出: "LVIII"  解釋: L = 50, V = 5, III = 3.循環

示例 5:  輸入: 1994  輸出: "MCMXCIV"  解釋: M = 1000, CM = 900, XC = 90, IV = 4.di

2. 思路分析

從高位到低位依次判斷,按從大到小的順序對每一個結點數(包括900、400、90、40、九、4)作除法、將相應的字符加入字符串,取餘數,重複上述三步直到獲得最終結果爲止。

對於每一個結點數其實須要作的事情是相同的,只是數字大小和對應的字符不一樣,爲了避免重複類似的代碼,因此考慮將除數和字符存入數組中,用循環結構解決該問題。

3.代碼

 1 public String intToRoman(int num) {  2         StringBuffer res = new StringBuffer();  3         int[] div = {1000,900,500,400,100,90,50,40,10,9,5,4,1};  4         String[] component = {"M","CM","D","CD","C","XC","L","XL","X",  5         "IX","V","IV","I"};  6         for(int i = 0; i < div.length; i++){  7             int count = num / div[i];  8             while(count > 0){  9  res.append(component[i]); 10                 count--; 11  } 12             num = num % div[i]; 13  } 14         return res.toString(); 15     }
相關文章
相關標籤/搜索