1.字母異位詞分組
給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。
思路:將字符串和異位詞列表形成映射
- 將字母轉化爲26位0-1串
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
unordered_map< string, vector<string> > mymap;
for(int i = 0; i < strs.size(); i++)
{
vector<int> str(26,0);
string temp = strs[i];
string mystr = "";
for(int j = 0; j < temp.length(); j++)
{
str[temp[j] - 'a']++;
}
for(int i = 0; i < str.size(); i++)
{
mystr += to_string(str[i]);
}
mymap[mystr].push_back(temp);
}
for(unordered_map< string, vector<string> >::iterator it = mymap.begin(); it != mymap.end(); it++)
{
res.push_back(it -> second);
}
return res;
}
- 將字符串直接排序進行映射
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
unordered_map< string, vector<string> > mymap;
for(int i = 0; i < strs.size(); i++)
{
string temp = strs[i];
sort(temp.begin(), temp.end());
mymap[temp].push_back(strs[i]);
}
for(unordered_map< string, vector<string> >::iterator it = mymap.begin(); it != mymap.end(); it++)
{
res.push_back(it -> second);
}
return res;
}
2.Pow(x,n)
實現pow(x,n),即計算x的n次冪函數。
思路:
- 簡單的循環會超時
- 遞歸折半
double myPow(double x, int n) {
if(n == 0)
{
return 1;
}
double half = myPow(x, n / 2);
if(n % 2 == 0)
{
return half * half;
}
else if(n > 0)
{
return half * half * x;
}
else
{
return half * half / x;
}
}