leetcode 12. 整数转罗马数字
replace法,但是比较耗时
public String intToRoman(int num) {
String rawStr = firstConvert(num);
rawStr = rawStr.replace("DCCCC", "CM");
rawStr = rawStr.replace("CCCC", "CD");
rawStr = rawStr.replace("LXXXX", "XC");
rawStr = rawStr.replace("XXXX", "XL");
rawStr = rawStr.replace("VIIII", "IX");
rawStr = rawStr.replace("IIII", "IV");
return rawStr;
}
public String firstConvert(int num) {
Map<String, Integer> table = new HashMap<>();
table.put("I", 1);
table.put("V", 5);
table.put("X", 10);
table.put("L", 50);
table.put("C", 100);
table.put("D", 500);
table.put("M", 1000);
StringBuilder res = new StringBuilder();
int remain = num;
// 1000
int M = remain / table.get("M");
becomeStr(res, "M", M);
remain = remain % table.get("M");
// 500
int D = remain / table.get("D");
becomeStr(res, "D", D);
remain = remain % table.get("D");
// 100
int C = remain / table.get("C");
becomeStr(res, "C", C);
remain = remain % table.get("C");
// 50
int L = remain / table.get("L");
becomeStr(res, "L", L);
remain = remain % table.get("L");
// 10
int X = remain / table.get("X");
becomeStr(res, "X", X);
remain = remain % table.get("X");
// 5
int V = remain / table.get("V");
becomeStr(res, "V", V);
remain = remain % table.get("V");
becomeStr(res, "I", remain);
return res.toString();
}
public void becomeStr(StringBuilder sb, String str, int times) {
for (int i = 0; i < times; i++) {
sb.append(str);
}
}
直接法
这题其实只要从大到小一 一 遍 历 一遍就行。
class Solution {
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
public String intToRoman(int num) {
StringBuffer roman = new StringBuffer();
for (int i = 0; i < values.length; ++i) {
int value = values[i];
String symbol = symbols[i];
while (num >= value) {
num -= value;
roman.append(symbol);
}
if (num == 0) {
break;
}
}
return roman.toString();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!