力扣 題目17-- 電話號碼的字母組合
阿新 • • 發佈:2022-04-04
題目
題解
這題我們可以發現用四層迴圈(即迴圈第一個數字的字母然後裡面套著第二個數字的字母 全部遍歷然後輸出)應該可以解決這個問題
觀察結果
輸出:["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 }點選這裡看程式碼