罗马数字转整数
算法:对输入字符串s从前往后遍历,并设置初始值为0的变量sum用于记录转换之后的整数值,sum的值会随着遍历的进行不断发生变化,遍历结束时的sum值即为罗马数字对应的整数值。
设立一个map型变量m用于存储罗马字符到整数值的映射。
在遍历字符串过程中,对于位置i处的元素,首先判断i+1处是否还有字符,
若没有,则直接将位置i处的罗马数字对应的整数加到sum中;
若有,还要判断i处罗马数字和i+1处罗马数字组成的罗马数字是否属于六种特殊情况之一,其实只要判断i处罗马数字的映射(整数)是否小于i+1处罗马数字的映射即可。若小于,则用sum减去i处罗马数字对应的整数:sum-=m[s[i]];否则用sum加上i处罗马数字对应的整数:sum+=m[s[i]]。
如此,完成了字符串s中位置i处字符的遍历。
我的答案1 正确
class Solution {
public:
int romanToInt(string s) {
map<char, int> m;
m['I'] = 1;
m['V'] = 5;
m['X'] = 10;
m['L'] = 50;
m['C'] = 100;
m['D'] = 500;
m['M'] = 1000;
int sum = 0;
for(auto ite = &s[0]; s[ite]='\0'; ite++)
{
if(s[ite+1]=='\0')
{
sum += m[s[ite]];
return sum;
}
if(m[str[ite]]<m[s[ite+1]])
sum -= m[s[ite]];
else
sum += m[s[ite]];
}
return sum;
}
};
第17行错了,ite初始值不对,应该为0,而不是s的首地址