leetcode 12--roman 数字
2018-12-15 本文已影响0人
Ariana不会哭

这个题首先要了解罗马数字分配规律:
主要需要讨论的是4+9
4=5-1=IV
9=10-1=IX
随后机智的网友就这样先将roman定义成数组:
char roman[] = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
int value[] = { 1000, 500, 100, 50, 10, 5, 1 };
例子:437
- 437/100 =4 = CD
- 37/10 =3 =XXX
-
7/10 =7 =VII
图片.png
说一下循环思路:
第一层循环:从0-7遍历value,int temp = num / value[i];
值得注意:不需要num/500 或带5 的,所以i=i+2
第二层对temp 结果进行判断:判断很简单给出C++ Java代码
string intToRoman(int num) {
char roman[] = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
int value[] = { 1000, 500, 100, 50, 10, 5, 1 };
string ans = "";
for (int i = 0; i < 7; i = i + 2) {
int temp = num / value[i];
if (temp < 4) {
for (int j = 1; j <= temp; j++)
ans = ans + roman[i];
}
else if (temp == 4) {
ans = ans + roman[i] + roman[i - 1];
}
else if (temp > 4 && temp < 9) {
ans = ans + roman[i - 1];
for (int j = 1; j <= temp - 5; j++)
ans += roman[i];
}
else if (temp == 9) {
ans = ans + roman[i] + roman[i - 2];
}
num = num % value[i];
}
return ans;
}
JAVA
class Solution {
public String intToRoman(int num) {
char roman[] = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
int value[] = { 1000, 500, 100, 50, 10, 5, 1 };
String ans = "";
for (int i = 0; i < 7; i = i + 2) {
int temp = num / value[i];
if (temp < 4) {
for (int j = 1; j <= temp; j++)
ans = ans + roman[i];
}
else if (temp == 4) {
ans = ans + roman[i] + roman[i - 1];
}
else if (temp > 4 && temp < 9) {
ans = ans + roman[i - 1];
for (int j = 1; j <= temp - 5; j++)
ans += roman[i];
}
else if (temp == 9) {
ans = ans + roman[i] + roman[i - 2];
}
num = num % value[i];
}
return ans;
}
}