回溯算法例题----电话号码的字母组合
Posted 4nc414g0n
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯算法例题----电话号码的字母组合相关的知识,希望对你有一定的参考价值。
方法1:回溯
题目链接
题目描述
:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母
思路
:
- 如果只输入一个2-9的数只需要一层循环:
for(auto e :arr[digits[index]-'0'])
- 如果输入两个2-9的数只需要两层层循环:
for(auto e :arr[digits[index]-'0'])
-----------------for(auto e :arr[digits[index+1]-'0'])
- 如果输入三个2-9的数只需要两层层循环:
for(auto e :arr[digits[index]-'0'])
-----------------for(auto e :arr[digits[index+1]-'0'])
----------------------------------for(auto e :arr[digits[index+2]-'0'])
- 输入的个数就是嵌套循环的个数
递归解决(注意for循环里的递归pop不要丢了
)
代码如下:
class Solution public: vector<vector<string>> arr="","","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"; //全局ret的vector<string> vector<string> ret; void Recursive(string& digits,string& s,int index) if(index==digits.size()) ret.push_back(s); return; else for(auto e :arr[digits[index]-'0']) s+=e; Recursive(digits,s,index+1); s.pop_back(); vector<string> letterCombinations(string digits) if(digits.size()==0) return ret; int length=digits.size()-1; string s; Recursive(digits,s,0); return ret; ;
方法2:队列
参考:题解
以上是关于回溯算法例题----电话号码的字母组合的主要内容,如果未能解决你的问题,请参考以下文章
[回溯算法]leetcode17. 电话号码的字母组合(c实现)