碎碎念
今兒在戶(hù)外寫(xiě)代碼绪商,寫(xiě)到黃昏,樂(lè)此不疲辅鲸「裼簦可是居然突然襲來(lái)一大波臭蚊子!独悴!腿上胳膊上叮了近20個(gè)包例书!但寫(xiě)簡(jiǎn)書(shū)又欲罷不能,結(jié)果怎么著刻炒?我大熱天的穿長(zhǎng)衣長(zhǎng)褲和外套繼續(xù)寫(xiě)=决采。= 為自己熱愛(ài)的青春致敬。
有評(píng)論網(wǎng)友說(shuō):明明可以靠臉吃飯坟奥,卻偏要靠實(shí)力树瞭。我想拇厢,臉和實(shí)力都要靠,這樣我就被夾住了晒喷,O(∩_∩)O哈哈哈~
問(wèn)題描述
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.
題目很簡(jiǎn)約孝偎,Roman卻不簡(jiǎn)潔。
羅馬數(shù)字到底是怎么記數(shù)的凉敲?
百度百科:
羅馬數(shù)字規(guī)則.png
第一次了解羅馬數(shù)字的計(jì)數(shù)法邪媳,果然應(yīng)該被淘汰了,太復(fù)雜了T荡陷。T
尤其是規(guī)則2和3雨效,逆天的方法。
我的解決思路就是把字母都用數(shù)值表示废赞,嚴(yán)格按照計(jì)數(shù)法來(lái)執(zhí)行徽龟。
貼上我的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] ){//如果左面比右面小,開(kāi)啟特殊技能
ans += tmp[i + 1] - tmp[i];
i++;//快進(jìn)一個(gè)字符
}
else
ans += tmp[i];
// cout<<ans<<endl;
}
return ans;
}
};
此代碼48ms唉地,非最佳据悔。中游。
我也不知道為什么有比我快的耘沼,看了幾個(gè)別人的解法极颓,思路一樣。
—END—