您的位置:首页 > 其它

LeetCode 12 - Integer to Roman

2015-06-10 14:30 204 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/yuanhisn/article/details/84723719

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

 

public String intToRoman(int num) {
StringBuilder sb = new StringBuilder();
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "I");
map.put(5, "V");
map.put(10, "X");
map.put(50, "L");
map.put(100, "C");
map.put(500, "D");
map.put(1000, "M");

int base = 1000;
while(base >= 1) {
int n = num/base;
if(n==4) {
sb.append(map.get(base)).append(map.get(base*5));
} else if(n==9) {
sb.append(map.get(base)).append(map.get(base*10));
} else {
if(n>=5) {
sb.append(map.get(base*5));
n -= 5;
}
for(int i=0; i<n; i++) {
sb.append(map.get(base));
}
}
num %= base;
base /= 10;
}
return sb.toString();
}

 

C++代码更简洁一些:

string intToRoman(int num) {
unordered_map<int, char> map = {{1,'I'},{5,'V'},{10,'X'},{50,'L'},{100,'C'},{500,'D'},{1000, 'M'}};
string res;
vector<int> list = {1000, 100, 10, 1};
for(auto n:list) {
int d = num/n;
num %= n;
if(d == 0) continue;
if(d < 4) {
res.append(d, map
);
} else if(d == 4) {
res += map
;
res += map[n*5];
} else if(d < 9) {
res += map[n*5];
if(d > 5)
res.append(d-5, map
);
} else if(d == 9) {
res += map
;
res += map[n*10];
}
}
return res;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: