Given an integer, convert it to a roman numeral.
The number is guaranteed to be within the range from 1
to 3999
.
What is Roman Numeral?
Example
4
-> IV
12
-> XII
21
-> XXI
99
-> XCIX
more examples at:
LeetCode上的原题,请参见我之前的博客。
解法一:
class Solution {public: /** * @param n The integer * @return Roman representation */ string intToRoman(int n) { string res = ""; vector> v { { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}, { "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}, { "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}, { "M", "MM", "MMM"}}; int cnt = 1000; for (int i = 3; i >= 0; --i) { int t = n / cnt; if (t) res += v[i][t - 1]; n %= cnt; cnt /= 10; } return res; }};
解法二:
class Solution {public: /** * @param n The integer * @return Roman representation */ string intToRoman(int n) { string res = ""; vector val { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; vectorstr{ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; for (int i = 0; i < val.size(); ++i) { while (n >= val[i]) { n -= val[i]; res += str[i]; } } return res; }};
解法三:
class Solution {public: /** * @param n The integer * @return Roman representation */ string intToRoman(int n) { string res = ""; vectorv1 { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; vector v2 { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; vector v3 { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; vector v4 { "", "M", "MM", "MMM"}; return v4[n / 1000] + v3[(n % 1000) / 100] + v2[(n % 100) / 10] + v1[n % 10]; }};
本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。