羅馬數字包含如下七種字符: I, V, X, L,C,D 和 M。 字符 數值 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 。 一般狀況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫作 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減少數 1 獲得的數值 4 。一樣地,數字 9 表示爲 IX。這個特殊的規則只適用於如下六種狀況: I 能夠放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。 X 能夠放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。 C 能夠放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。 給定一個整數,將其轉爲羅馬數字。輸入確保在 1 到 3999 的範圍內。 示例 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. 來源:力扣(LeetCode) 連接:https://leetcode-cn.com/problems/integer-to-roman 著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。
辦法比較笨,運行時間比較快,可是佔用內存太多。數組
這道題能夠不用鍵值對,用兩個數組,這樣佔用的內存,會比這個小一點。網絡
public class Solution { public string IntToRoman(int num) { Dictionary<int, string> map = new Dictionary<int, string>(); map.Add(1, "I"); map.Add(4, "IV"); map.Add(5, "V"); map.Add(9, "IX"); map.Add(10, "X"); map.Add(40, "XL"); map.Add(50, "L"); map.Add(90, "XC"); map.Add(100, "C"); map.Add(400, "CD"); map.Add(500, "D"); map.Add(900, "CM"); map.Add(1000, "M"); int[] nums = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; string roman = ""; for (int i = 0; i < map.Count; i++) { if (num >= nums[i]) { roman += map[nums[i]]; num -= nums[i]; i--; } } return roman; } }