电话号码的字母组合
给定一个数字字符串,返回数字所有可能表示的字母组合。数字到字母的映射(和电话号码一样)。
输入:数字字符串 "23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
分析:
1.采用递归与回溯算法,当index值为digits的大小时,则表示已完成排列2.每次成功一次排列,就回退到上一步(str.pop_back()),进行下一次排列void combinations(string digits,vector&result,int index,string str){ if(index==digits.size()){ result.push_back(str); return; } string base[]={"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; for(int i=0;i letterCombinations(string digits) { if(digits.empty())return vector (); vector result; combinations(digits, result, 0, ""); return result;}
全排列
给定一个含有不同数字的集合,返回所有可能的全排列。
比如,[1,2,3] 具有如下排列:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
分析:
1.注意每次递归参加的排列元素不同void fullOrder(vector> &result,vector &nums,vector &tmp,int size){ if(tmp.size()==size){ result.push_back(tmp); return; } for(int i=0;i