- roman数是按求和来计量的,而阿拉伯是按加权来计量(不同进制,权值不同)。
roman->int
class Solution {
public:
int romanToInt(string s) {
if(s.empty()) return 0;
unordered_map<char, int> map = {{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
int integer = 0, i = 0, n = s.length();
while(i < n){
if(i < n-1 && map[s[i]] < map[s[i+1]]){
integer += (map[s[i+1]] - map[s[i]]);
i += 2;
}else{
integer += map[s[i]];
i++;
}
}
return integer;
}
};
int->roman
4 和9特殊,因此把这些特殊位置求出来,再按增量规律计算roman数。
class Solution {
public:
string intToRoman(int num) {
string roman;
vector<int> values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
vector<string> symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
for(int i = 0; i<values.size();){
if(num / values[i]){
roman += symbols[i];
num -= values[i];
}else{
i++;
}
}
return roman;
}
};