参考资料:https://blog.csdn.net/magicdoubi/article/details/86561355
相关知识:
1.string数据调用
2.break用法
解法一
考虑高位数值小于相邻低位数值时,高位数值符号为负。
class Solution {
public:
int romanToInt(string s) {
char r[7]={'I','V','X','L','C','D','M'};
int n[7]={1,5,10,50,100,500,1000};
int res = 0;
for (int j = 0; j < s.length(); j++)
{
int num = 0;
int i = 0;
int lastn = 0;
for (i = 0; i < 8; i++)
{
if (s[j]==r[i]){
num = n[i];
break;
}
}
if(j>0){
for (lastn = 0; lastn < 8; lastn++)
{
if(s[j-1]==r[lastn]){
break;
}
}
}
if(j>0 && n[lastn]<n[i] && i>0 ){
res= res-2*n[lastn];//如果高位数值低于地位,则减去两个高位数值使其符号为负
}
res = res + n[i];//对于所有的字符先加一遍
//printf("num=%d;j=%d,i=%d;",num,j,i);
}
return res;
}
};
运行速度:
踩坑
1.break:当前循环终止。
2.continue:当前迭代终止,继续循环。
3.试图用unordered_map函数,但是由于没能成功建立<int, char>失败了。基础好差啊,好难过。