题目描述
给一串罗马数字,将其转换成整型。
题目分析
遍历所有字符,如果当前字符值大于后一字符值或者为最后一字符,
则当前和加上该字符值,否则当前值为倒装,向前遍历,不断翻转值。
代码
#include <iostream>
class Solution {
public:
int romanToInt(std::string s) {
int result = 0;
for (unsigned i = 0; i < s.length(); ++i) {
if ((i + 1 >= s.length() || i + 1 == 0) || choose(s[i]) >= choose(s[i+1])) {
result += choose(s[i]);
//std::cout << result << std::endl;
} else {
int flag = 1;
unsigned j = i + 1;
while (j < s.length() && j && choose(s[j-1]) < choose(s[j])) {
flag *= -1;
++j;
}
result += flag * choose(s[i]);
}
}
return result;
}
int choose(char c) {
int rs = 0;
switch (c) {
case 'I': rs = 1;
break;
case 'V': rs = 5;
break;
case 'X': rs = 10;
break;
case 'L': rs = 50;
break;
case 'C': rs = 100;
break;
case 'D': rs = 500;
break;
case 'M': rs = 1000;
break;
default: rs = 0;
break;
}
return rs;
}
};
总结
1次AC
近期评论