From dc1f0c4c0096013799416664894c5194dc7e1f52 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Fri, 28 Feb 2025 23:13:39 +0800 Subject: chore(store): move everything to store. --- store/works/solutions/leetcode/cpp/17.cpp | 56 +++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 store/works/solutions/leetcode/cpp/17.cpp (limited to 'store/works/solutions/leetcode/cpp/17.cpp') diff --git a/store/works/solutions/leetcode/cpp/17.cpp b/store/works/solutions/leetcode/cpp/17.cpp new file mode 100644 index 0000000..74e33b4 --- /dev/null +++ b/store/works/solutions/leetcode/cpp/17.cpp @@ -0,0 +1,56 @@ +#include +#include + +using std::string; +using std::vector; + +vector c_map[9]{ + {'a', 'b', 'c'}, + {'d', 'e', 'f'}, + {'g', 'h', 'i'}, + {'j', 'k', 'l'}, + {'m', 'n', 'o'}, + {'p', 'q', 'r', 's'}, + {'t', 'u', 'v'}, + {'w', 'x', 'y', 'z'}}; + +void combine(const string::const_iterator ¤t, const string::const_iterator &end, string &head, vector &result) +{ + const auto &chars = c_map[(*current) - '2']; + + if (current == end) + { + for (auto c : chars) + { + head.push_back(c); + result.push_back(head); + head.pop_back(); + } + return; + } + + for (auto c : chars) + { + head.push_back(c); + combine(current + 1, end, head, result); + head.pop_back(); + } +} + +class Solution +{ +public: + vector letterCombinations(string digits) + { + std::vector result; + + if (digits.empty()) + return result; + + std::string head; + + combine(digits.cbegin(), digits.cend() - 1, head, result); + + return result; + } +}; -- cgit v1.2.3