leetcode—5/9

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;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章