HOT57-电话号码的字母组合

       leetcode原题链接:电话号码的字母组合

题目描述

        给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

解题方法: 回溯法。backtrack(digits, i, tmp, result, mp)表示依次对第i个数字对应的字母进行赋值处理。

C++代码

#include 
#include 
#include 
#include 
class Solution {
public:std::vector letterCombinations(std::string digits) {int n = digits.size();if (n == 0) {return {};}std::string tmp;std::vector result;std::map mp = {{'2', "abc"},{'3', "def"},{'4', "ghi"},{'5', "jkl"},{'6', "mno"},{'7', "pqrs"},{'8', "tuv"},{'9', "wxyz"}};backtrack(digits, 0, tmp, result, mp);return result;}// 对第i个数字对应的字母分别取值void backtrack(const std::string& digits, int i, std::string& tmp,std::vector& result,std::map& mp) {int n = digits.size();if (i == n) {result.emplace_back(tmp);return;}char number = digits[i];if (mp.count(number)) { //对digits[i]的每一种可能做出选择std::string str = mp[number];for (char ch : str) {tmp.push_back(ch);//做出选择backtrack(digits, i + 1, tmp, result, mp);tmp.pop_back();//撤销选择}}}
};


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部