題目介紹
題目:整數(shù)轉(zhuǎn)羅馬數(shù)字
描述:羅馬數(shù)字包含以下七種字符: I, V缅疟, X翎蹈, L羔杨,C,D 和 M杨蛋。字符 數(shù)值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 羅馬數(shù)字 2 寫做 II 理澎,即為兩個(gè)并列的 1逞力。12 寫做 XII ,即為 X + II 糠爬。 27 寫做 XXVII, 即為 XX + V + II 寇荧。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊执隧。但也存在特例揩抡,例如 4 不寫做 IIII户侥,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊峦嗤,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 蕊唐。同樣地,數(shù)字 9 表示為 IX烁设。這個(gè)特殊的規(guī)則只適用于以下六種情況:
- I 可以放在 V (5) 和 X (10) 的左邊替梨,來表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左邊装黑,來表示 40 和 90副瀑。
- C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900恋谭。
給定一個(gè)整數(shù)糠睡,將其轉(zhuǎn)為羅馬數(shù)字。輸入確保在 1 到 3999 的范圍內(nèi)疚颊。
示例 1:
- 輸入: 3
輸出: "III"示例 2:
- 輸入: 4
輸出: "IV"示例 3:
- 輸入: 9
輸出: "IX"示例 4:
- 輸入: 58
輸出: "LVIII"
解釋: L = 50, V = 5, III = 3.示例 5:
- 輸入: 1994
輸出: "MCMXCIV"
解釋: M = 1000, CM = 900, XC = 90, IV = 4.
解析
這個(gè)問題比較常規(guī)狈孔,它和獲取一個(gè)數(shù)中每一位的數(shù)字相比,僅僅多了幾個(gè)狀態(tài)串稀。獲取數(shù)的每一位相當(dāng)于先查看這個(gè)數(shù)有幾個(gè)1000除抛,再看有幾個(gè)100,再看有幾個(gè)10母截,再看有幾個(gè)1到忽,而轉(zhuǎn)羅馬數(shù)字就還需要看有幾個(gè)900,有幾個(gè)500清寇,等等喘漏。所以第一步,我們需要把這些需要判斷的狀態(tài)存到數(shù)組里华烟,然后再把計(jì)算結(jié)果轉(zhuǎn)成字母即可翩迈。所以沒什么好說的,我們直接看代碼吧:
public String intToRoman(int num) {
if(num<=0) return "";
String[] romanStr = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int[] romanInt = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
StringBuilder result = new StringBuilder();
int i = 0;
while (num>0 && i<romanInt.length) {
if (num<romanInt[i]) {
i++;
continue;
}
result.append(romanStr[i]);
num-=romanInt[i];
}
return result.toString();
}
總結(jié)
這個(gè)題目雖然看似復(fù)雜盔夜,但是其原理十分簡單负饲,所以我們不要被它長長的描述給嚇著了,只要按照自己的思路來做就好喂链。
PS:你能實(shí)現(xiàn)相反的操作嗎返十?把一個(gè)羅馬數(shù)字轉(zhuǎn)成整數(shù),不妨試試吧~
相關(guān)源碼已經(jīng)上傳到我的Github椭微。
下題預(yù)告
題目:三數(shù)之和
描述:給定一個(gè)包含 n 個(gè)整數(shù)的數(shù)組 nums洞坑,判斷 nums 中是否存在三個(gè)元素 a,b蝇率,c 迟杂,使得 a + b + c = 0 刽沾?找出所有滿足條件且不重復(fù)的三元組。
注意:答案中不可以包含重復(fù)的三元組排拷。
例如, 給定數(shù)組 nums = [-1, 0, 1, 2, -1, -4]侧漓,
滿足要求的三元組集合為:[ [-1, 0, 1], [-1, -1, 2] ]
我是飛機(jī)醬,如果您喜歡我的文章攻泼,可以關(guān)注我~
編程之路火架,道阻且長。唯忙菠,路漫漫其修遠(yuǎn)兮何鸡,吾將上下而求索。