LeetCode【13--罗马数字转整数】LeetCode【14--最长的公共前缀】
羅馬數(shù)字轉(zhuǎn)整數(shù)
題目描述
羅馬數(shù)字包含以下七種字符: I, V, X, L,C,D 和 M。
例如, 羅馬數(shù)字 2 寫(xiě)做 II ,即為兩個(gè)并列的 1。12 寫(xiě)做 XII ,即為 X + II 。 27 寫(xiě)做 XXVII, 即為 XX + V + II 。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫(xiě)做 IIII,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為 IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:
- I 可以放在 V (5) 和 X (10) 的左邊,來(lái)表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左邊,來(lái)表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左邊,來(lái)表示 400 和 900。
給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。輸入確保在 1 到 3999 的范圍內(nèi)。
解題思路
羅馬數(shù)字只有特定的幾個(gè)字符來(lái)表示,那么除了這些特定的字符,其余數(shù)字該怎么表示
比方說(shuō)III其實(shí)就是3個(gè)I也就是三個(gè)1相加,那么4–IV該怎么表示,其實(shí)就是V減去I所以,只要前面的羅馬數(shù)字所對(duì)應(yīng)的整數(shù)小于后面羅馬數(shù)字所對(duì)應(yīng)整數(shù),就要減去(用一個(gè)變量來(lái)保存),而如果不小于就要加上(用另外一個(gè)變量來(lái)保存),最后的結(jié)果就是兩個(gè)變量相加
代碼實(shí)現(xiàn)
map<char, int> mp;mp['I'] = 1;mp['V'] = 5;mp['X'] = 10;mp['L'] = 50;mp['C'] = 100;mp['D'] = 500;mp['M'] = 1000;int cur = 0; //要計(jì)算減去的變量int pos = 0; //要及計(jì)算加上的變量for(int i = 0;i<s.size()-1;++i){if(mp[s[i]]<mp[s[i+1]])cur-=mp[s[i]];elsepos+=mp[s[i]];} pos+=mp[s.back()];return pos+cur;最長(zhǎng)的公共前綴
題目描述
編寫(xiě)一個(gè)函數(shù)來(lái)查找字符串?dāng)?shù)組中的最長(zhǎng)公共前綴。
如果不存在公共前綴,返回空字符串 “”。
解題思路
本體給的參數(shù)是vector<string> v,因?yàn)槭枪睬熬Y,所以以第一個(gè)字符串為標(biāo)準(zhǔn),遍歷第一個(gè)字符串,如果為空,直接返回"",每掃描一個(gè)字符,就與后面的每個(gè)字符串的相同位置做比較,如果相同加到返回結(jié)果了,一但不同直接返回。
代碼實(shí)現(xiàn)
class Solution { public:string longestCommonPrefix(vector<string>& strs) {string res = "";if(strs.empty())return res;char ch ;for(int i =0 ;;++i){if(i<strs[0].size())ch = strs[0].at(i);elsereturn res;for(auto& e:strs){ if(i < e.size() && ch == e[i]) //什么也不干,因?yàn)橥ㄟ^(guò)篩選;else//沒(méi)通過(guò),直接返回return res;}//加上每回通過(guò)的res+= ch;}return res;} };總結(jié)
以上是生活随笔為你收集整理的LeetCode【13--罗马数字转整数】LeetCode【14--最长的公共前缀】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百变大侦探古格王朝凶手是谁
- 下一篇: 子矩阵的和