题目描述
解题思路
1、暴力解
遍历整数的每一位数,逐一判断即可,题目要求输入范围在1到3999之间
Java代码:
class Solution {
public String intToRoman(int num) {
//用于存储结果
StringBuilder result = new StringBuilder();
//如果该数大于等于1000
if(num >= 1000) {
int nt = num / 1000; //取到千位数
for (int i = 0; i < nt; i++) { //几千就加几个M
result.append("M");
}
num = num - nt * 1000; //去除千位数
}
if(num >= 100) { //如果大于等于100
int nh = num / 100; //取百位数
if(nh == 9) { //如果为9
result.append("CM"); //加入CM
}else if(nh < 9 && nh >= 5) { //如果小于9大于5
result.append("D"); //先加入个D
for (int i = 0; i < nh - 5; i++) { //剩下的加入C
result.append("C");
}
}else if(nh == 4) { //如果等于4
result.append("CD"); //就加入CD
}else {
for (int i = 0; i < nh; i++) { //否则就加入C
result.append("C");
}
}
num = num - nh * 100; //去除百位数
}
if(num >= 10) {
int nh = num / 10; //十位数
if(nh == 9) { //如果为9
result.append("XC"); //加入XC
}else if(nh < 9 && nh >= 5) { //大于等于5, 小于9
result.append("L"); //先加入L
for (int i = 0; i < nh - 5; i++) { //剩下的加X
result.append("X");
}
}else if(nh == 4) { //为4
result.append("XL"); //加入XL
}else {
for (int i = 0; i < nh; i++) {
result.append("X"); //剩下的加X
}
}
num = num - nh * 10;
}
//个位数
if(num == 9) { //为9
result.append("IX"); //加入IX
}else if(num < 9 && num >= 5) { //小于9大于等于5
result.append("V"); //先加入V
for (int i = 0; i < num - 5; i++) {
result.append("I"); //剩下的加入I
}
}else if(num == 4) { //为4
result.append("IV"); //加入IV
}else {
for (int i = 0; i < num; i++) { //否则加入I
result.append("I");
}
}
return result.toString();
}
}
2、利用数组简化代码
Java代码:
class Solution {
public String intToRoman(int num) {
String[] lm = {"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};
StringBuilder result = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while(num >= values[i]) {
result.append(lm[i]);
num -= values[i];
}
}
return result.toString();
}
}
Python3代码:
class Solution:
def intToRoman(self, num: int) -> str:
result = ''
lm = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
for i in range(len(values)):
while num >= values[i]:
result += lm[i]
num -= values[i]
return result