碎碎念
今儿在户外写代码,写到黄昏,乐此不疲。可是居然突然袭来一大波臭蚊子!!腿上胳膊上叮了近20个包!但写简书又欲罢不能,结果怎么着?我大热天的穿长衣长裤和外套继续写=。= 为自己热爱的青春致敬。
有评论网友说:明明可以靠脸吃饭,却偏要靠实力。我想,脸和实力都要靠,这样我就被夹住了,O(∩_∩)O哈哈哈~
问题描述
13.Roman to Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
题目很简约,Roman却不简洁。
罗马数字到底是怎么记数的?
百度百科:
第一次了解罗马数字的计数法,果然应该被淘汰了,太复杂了T。T
尤其是规则2和3,逆天的方法。
我的解决思路就是把字母都用数值表示,严格按照计数法来执行。
贴上我的AC代码
class Solution {
public:
int romanToInt(string s) {
int ans = 0;
vector<int> tmp;
for(int i = 0; i < s.length(); i++ ){
char a = s[i];
switch(a){
case 'M': tmp.push_back(1000); break;
case 'D': tmp.push_back(500); break;
case 'C': tmp.push_back(100); break;
case 'L': tmp.push_back(50); break;
case 'X': tmp.push_back(10); break;
case 'V': tmp.push_back(5); break;
case 'I': tmp.push_back(1); break;
default: break;
}
}
for(int i = 0; i < tmp.size(); i++){
if ( i < tmp.size() - 1 && tmp[i] < tmp[i + 1] ){//如果左面比右面小,开启特殊技能
ans += tmp[i + 1] - tmp[i];
i++;//快进一个字符
}
else
ans += tmp[i];
// cout<<ans<<endl;
}
return ans;
}
};
此代码48ms,非最佳。中游。
我也不知道为什么有比我快的,看了几个别人的解法,思路一样。
—END—