作者Rushia (みけねこ的鼻屎)
看板Marginalman
標題Re: [閒聊] 每日LeetCode
時間Thu Oct 20 09:21:06 2022
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