西安市做网站公司有哪些,WordPress 经典博客,宁波seo教程推广平台,宣传推广的形式有哪些17. 电话号码的字母组合 - 力扣#xff08;LeetCode#xff09;
思路#xff1a;既然要排列组合#xff0c;就得先根据数字字符取出来
所以先定义一个string类的数组通过下标取到每个数字对应的映射。
string _numsTostr[10]{,,abc…17. 电话号码的字母组合 - 力扣LeetCode
思路既然要排列组合就得先根据数字字符取出来
所以先定义一个string类的数组通过下标取到每个数字对应的映射。
string _numsTostr[10]{,,abc,def,ghi,jkl,mno,pqrs,tuv,wxyz};
接下来便是想到如果可以用递归把每次组合的值返回追加到一个vectorstring对象中且能回到上一个位置继续就能将全排列搞定。 因为通过di下标访问数组所以当didigits.size()时得到字符串尾插到v中返回上一级。
可以通过for循环访问每一个数字映射的全部字符。
class Solution
{
public:string _numsTostr[10]{,,abc,def,ghi,jkl,mno,pqrs,tuv,wxyz};void Combine(const string digits,int di,string cbstr,vectorstring v){if(didigits.size()){v.push_back(cbstr);return;}int num digits[di]-0;string str _numsTostr[num];for(int i0;istr.size();i){Combine(digits,di1,cbstrstr[i],v);}}vectorstring letterCombinations(string digits) {vectorstring v;if(digits.empty()){return v;}Combine(digits,0,,v);return v;}
};
注意1.main函数加个if是因为防止用户输入为空进到Combine里还会通过if尾插。 2.其中的参数cbstr是保存每一次最后的字符串把他尾插到v里而递归往下走时的每一层字符由str加到cbstr里。 3.这里传的参数v加了引用目的是直接加到外面要返回的v里。
附上一部分自己画的递归展开图方便理解。