// // Solution17.cpp // Algorithm // // Created by Pancf on 2019/12/3. // Copyright © 2019 Pancf. All rights reserved. // #include "Solution17.hpp" //vector Solution17::letterCombinations(string digits) { // vector rv; // if (digits.empty()) { // return rv; // } // rv.push_back(""); // const vector v = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; // for (auto ch : digits) { // if (ch < '2' || ch > '9') { // continue; // } // auto candidate = v[ch - '0']; // if (candidate.empty()) { // continue; // } // vector tmp; // for (auto candi_ch : candidate) { // for (auto rv_ch : rv) { // tmp.push_back(rv_ch + candi_ch); // } // } // rv.swap(tmp); // } // return rv; //} void dfs(const vector& candidates, vector& rv, string& local, const string dig, int index) { if (dig.size() == index) { rv.push_back(local); } else { auto candidate = candidates[dig[index] - '0']; for (auto ch : candidate) { local.push_back(ch); dfs(candidates, rv, local, dig, index+1); local.pop_back(); } } } vector Solution17::letterCombinations(string digits) { vector rv; if (digits.empty()) { return rv; } const vector v = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; string local; dfs(v, rv, local, digits, 0); return rv; }