精華區beta Marginalman 關於我們 聯絡資訊
12. Integer to Roman 給予一個1到3999之間的整數,將這個整數轉成羅馬符號表示法,羅馬數字是以拼接的方 方式表示,例如: I = 1 II = 2 III = 3 但是遇到四個連續符號時會經過轉換,例如: IIII != 4 要改成大數在右,而小數在左: IX = 5-1 = 4 (從左邊讀到右邊時,如果有小數在左表示是右數減左數) X = 5 XI = 6 XII = 7 XIII = 8 IX = 9 X = 10 ..... 所以會變成一個{1, 4, 5, 9, 10 ,40, ...} 的循環 Example: Input: num = 58 Output: "LVIII" Explanation: L = 50, V = 5, III = 3. 思路: 1.建立一個所有羅馬數字表示的表。 I 1 IV 4 V 5 XI 9 X 10 XL 40 L 50 XC 90 C 100 CD 400 D 500 CM 900 M 1000 2.從數字大到小,如果可以用大數表示就把特定字串append,並減去該數字,直到不 能用大數表示時再去找小的,直到數字用完為止。 JavaCode: class Solution { public static String intToRoman(int num){ StringBuilder result = new StringBuilder(); String[] roman = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; int i = 0; while (num > 0) { while ( num >= values[i]) { num -= values[i]; result.append(roman[i]); } i++; } return result.toString(); } } 羅馬爹壓嚕 -- https://i.imgur.com/He2OJUh.jpg -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.19.35 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1666228869.A.0ED.html ※ 編輯: Rushia (36.231.19.35 臺灣), 10/20/2022 09:21:46
sustainer123: 大師 10/20 09:22
Jaka: 大師 10/20 09:41
pandix: 大師 10/20 14:58