leetcode 17电话号码的字母组合
与子集70?类似,子集每次两个分支,本题每次k个分支,子集是第一次不push第二次push元素,本题是每次都push元素,因此,本题答案的长度都为k,子集题目为各种组合;
/** res,level,nums,i,dict **/ class Solution { public: vector<string> letterCombinations(string digits) { len=digits.length(); if(len==0) return {}; //字母转化为数字 for(int i=0;i<len;i++){ int num=digits[i]-'0'; nums.push_back(num); } vector<string> res; string level; dfs(0,res,level); return res; } //建立递归函数,从第一个号码开始递归,到最后一个号码结束; void dfs(int i,vector<string>&res,string& level){ //递归边界 if(i>=len){ res.push_back(level);return; } //递归表达式,选择第i个元素 string cur_str=dict[nums[i]]; for(int k=0;k<cur_str.length();k++){ level.push_back(cur_str[k]); dfs(i+1,res,level); level.pop_back(); } } private: int len; vector<int> nums; vector<string> dict={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; };