力扣 题目17-- 电话号码的字母组合
题目
题解
这题我们可以发现用四层循环(即循环第一个数字的字母然后里面套着第二个数字的字母 全部遍历然后输出)应该可以解决这个问题
观察结果
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
那么我们可不可以先把第一个数字的字母全部放进去 然后再去循环第二个呢
即 第一轮循环
输出:["a","a","a","b","b","b","c","c","c"]
第二轮循环
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
1.先创建一个vector
vector<string> Telephone = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
这样下标就是对应数字
2.先获取一下最后结果有多少种可能性即 数字代表字母个数相乘 由于别忘了用resize将返回的result扩大到number 个空间
int number = 1; for (int i = 0; i < digits.size(); i++) { number = number * Telephone[digits[i] - 48].size(); } result.resize(number); int number2 = number;
3.遍历
先固定digits的数字->再判断要循环的次数(看看是否到number 不是就继续循环)->然后循环一遍数字代表的字符串->将字符串放进对应的空间
for (int i = 0; i < digits.size(); i++) { int size = Telephone[digits[i] - 48].size(); for (int h = 0; h < number2;) { for (int j = 0; j < size; j++) { for (int g = (number / size) * j+h; g < (number / size) * (j + 1) + h; g++) { result[g] = result[g] + Telephone[digits[i] - 48][j]; } } h = h + number; } number = number / Telephone[digits[i] - 48].size(); }
4.如果为空需要直接返回
vector<string> result = {}; if (digits == "") { return result; }
代码

1 #include<iostream> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 vector<string> Telephone = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" }; 6 class Solution { 7 public: 8 vector<string> letterCombinations(string digits) { 9 vector<string> result = {}; 10 if (digits == "") { 11 return result; 12 } 13 int number = 1; 14 for (int i = 0; i < digits.size(); i++) 15 { 16 number = number * Telephone[digits[i] - 48].size(); 17 } 18 result.resize(number); 19 int number2 = number; 20 for (int i = 0; i < digits.size(); i++) { 21 int size = Telephone[digits[i] - 48].size(); 22 for (int h = 0; h < number2;) { 23 for (int j = 0; j < size; j++) { 24 for (int g = (number / size) * j+h; g < (number / size) * (j + 1) + h; g++) { 25 result[g] = result[g] + Telephone[digits[i] - 48][j]; 26 } 27 } 28 h = h + number; 29 } 30 number = number / Telephone[digits[i] - 48].size(); 31 } 32 return result; 33 } 34 }; 35 int main() { 36 Solution sol; 37 string digits = "789"; 38 vector<string> result = sol.letterCombinations(digits); 39 for (vector<string> ::iterator it = result.begin(); it != result.end(); it++) { 40 cout << *it << endl; 41 } 42 }