17. 电话号码的字母组合中

发布时间:2023年12月28日

给定一个仅包含数字?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']?的一个数字。

?

?vector<string>vecStr={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};

? ? vector<vector<bool>>visited=vector<vector<bool>>(10,vector<bool>(4,false));

? ? void backtrack(vector<string>&ret,string digits,int cur,std::deque<char>&stk,vector<vector<bool>>&visited)

? ? {

? ? ? ? if(stk.size() == digits.size())

? ? ? ? {

? ? ? ? ? ? deque<char>tmpStk=stk;

? ? ? ? ? ? string str="";

? ? ? ? ? ? while(!tmpStk.empty()){

? ? ? ? ? ? ? ? str = str+ tmpStk.front();

? ? ? ? ? ? ? ? tmpStk.pop_front();

? ? ? ? ? ? }

? ? ? ? ? ? if(str!="")

? ? ? ? ? ? {

? ? ? ? ? ? ? ? ret.push_back(str);

? ? ? ? ? ? } ?

? ? ? ? }

? ? ? ? for(int i=cur;i<digits.size();i++)

? ? ? ? {

? ? ? ? ? ? int cTmp=digits[i]-'0';

? ? ? ? ? ? string tmpStr=vecStr[cTmp];

? ? ? ? ? ? for(int j=0;j<tmpStr.size();j++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(visited[i][j]==true)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? visited[i][j]=true;

? ? ? ? ? ? ? ? stk.push_back(tmpStr[j]);

? ? ? ? ? ? ? ? backtrack(ret, digits,i+1,stk,visited);

? ? ? ? ? ? ? ? visited[i][j]=false;

? ? ? ? ? ? ? ? stk.pop_back();

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? vector<string> letterCombinations(string digits) {

? ? ? ? vector<string>ret;

? ? ? ? deque<char>stk;

? ? ? ? backtrack(ret, digits, 0,stk,visited);

? ? ? ? return ret;

? ? }

文章来源:https://blog.csdn.net/yinhua405/article/details/135259749
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。