題目連結:17. Letter Combinations of a Phone Number

我覺得這種 backtracking 或是 dfs 的題目都需要想清處 depth 的定義是什麼,想清楚就會好寫許多。

程式實做

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        if (digits.size() == 0)
            return {};
        vector<string> phoneNumber = {
            "", "", "abc", "def", "ghi", "jkl", "mno",
            "pqrs", "tuv", "wxyz"
        };
        vector<string> combs;
        string current;
        backtracking(0, digits, current, phoneNumber, combs);

        return combs;
    }

    void backtracking(int index, string digits, string current, 
        vector<string> phoneNumber, vector<string> &combs) {
            if (index >= digits.size()) {
                combs.push_back(current);
                return;
            }

            int i = digits[index] - '0';
            for (char c : phoneNumber[i]) {
                current.push_back(c);
                backtracking(index + 1, digits, current, phoneNumber, combs);
                current.pop_back();
            }
    }
};