給定整數(1~3999),轉換為羅馬數字。
羅馬數字包含減法表示(4=IV, 9=IX, 40=XL, 90=XC, 400=CD, 900=CM)。將所有「基數」按值降序排列,貪心法:當數值 ≥ 當前基數,輸出對應符號,減去基數值,重複直到數值為 0。
public class Solution {
public string IntToRoman(int num) {
string result = "";
Type R = typeof(Roman);
foreach (var r in Enum.GetNames(R).Reverse()) {
int val = int.Parse(Enum.Format(R, Enum.Parse(R, r), "d"));
while (num >= val) { result += r; num -= val; }
}
return result;
}
public enum Roman { M=1000, CM=900, D=500, CD=400, C=100, XC=90, L=50, XL=40, X=10, IX=9, V=5, IV=4, I=1 };
}
Reverse() 確保從大到小處理。Enum.Parse/Format 取得數值。下一題 LeetCode 13 Roman to Integer 為反向轉換。