7.24 combo & letterComboPhoneNum

to do

7.24 combo & letterComboPhoneNum_第1张图片

8.5.2] Combinations ite

昨天学的dfs+backtracking还是有用哒

7.24 combo & letterComboPhoneNum_第2张图片

    void combineR(int start, int n, int k, vector& path, vector>& ret) {
        if (path.size()==k) {
            ret.push_back(path);
            return;
        }    
        for (int i=start; i<=n; ++i) {
            path.push_back(i);
            combineR(i+1, n, k, path, ret);
            path.pop_back();
        }
    }
   
    vector> combine(int n, int k) {
        if (k>n) return vector> {};
        vector path; 
        vector> ret;
        combineR(1, n, k, path, ret);
        return ret;
    }

8.5.2] rec w/ math equ

C(n,k)=C(n-1,k-1)+C(n-1,k)
60%. Note that I initially did if (k==0||k>n) return vec>{};This will cause missing elems.

    vector> combine(int n, int k) {
        if (k>n) return vector>{};
        vector vec;
        if (k==n || k==0) {
            for (int i=1; i<=k; ++i) vec.push_back(i);
            return vector> {vec};
        }
        
        auto ret1 = combine(n-1, k-1);
        for_each(ret1.begin(), ret1.end(), [n](vector& v){
            v.push_back(n);}); // need to capture n
        auto ret2 = combine(n-1, k);
        ret1.insert(ret1.begin(), ret2.begin(), ret2.end());
        return ret1;
    }

8.6.1] rec Letter Combinations of a Phone Number

note using vector keypads {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

    void letterR(vector& keypads, string digits, string& path, vector& ret) {
        if (path.size()==digits.size()) {
            ret.push_back(path);
            return;
        }
        string letters = keypads[digits[path.size()]-'0'];
        for (int i=0; i letterCombinations(string digits) {
        vector ret;
        if (digits=="") return ret;
        vector keypads {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        string path; 
        letterR(keypads, digits, path, ret);
        return ret;
    }

8.6.2] ite Letter Combinations of a Phone Number

写一写找规律,然而看了答案;(

    vector letterCombinations(string digits) {
        if (digits.empty()) return vector{};
        const vector keypads {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        vector ret {""};
        
        for (int i=0; i ret_base = std::move(ret);
            ret.clear();
            for (int j=0; j toInsert = ret_base;
                char c = keypad[j];
                for (string& str : toInsert) {
                    str.push_back(c);
                }
                ret.insert(ret.end(), toInsert.begin(), toInsert.end());
                
            }
        }
        return ret;
    }

你可能感兴趣的:(7.24 combo & letterComboPhoneNum)