1. 程式人生 > >LEETCODE DIARY3: 電話按鍵對應字母排列組合

LEETCODE DIARY3: 電話按鍵對應字母排列組合

Letter Combinations of a Phone Number
//輸入2~9構成的數字串,輸出可能表示的字串
//對應:0,1無對應字元,2-(abc) 3-(def) 4-(ghi) 5-(jkl) 6-(mno) 7-(pqrs) 8-(tuv) 9-(wxyz)
//找到的這個參考方法是c++語言的
//p.s. c++的vector類自帶"push_back()"函式用於在vector尾部插入資料;string類也有push_back()用於在字串後插入一個字元
class Solution {
public:
    vector<string> letterCombinations(string digits) 
    {
     	vector<string> res;
     	string charmap[10] = {"0","1","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};	//字元map
     	res.push_back("");	//初始大小為1(服務於下面的迴圈條件)
        
        if(digits.empty())  //對付輸入是空的testcase
            {
                vector<string> null;
                return null;
            }
        

     	for(int i = 0; i < digits.size(); i++)
     	{
     		vector<string> temp;
     		string chars = charmap[digits[i]-'0'];	//數字對應的字串  -'0'是減去0的ASCII碼值,即將char的數字變為int
     		for(int c = 0; c < chars.size(); c++) //遍歷數字對應字元
     			for(int j = 0; j < res.size(); j++)	//遍歷已有字串
     				temp.push_back(res[j] + chars[c]);	//輸出已有字串和新增字元的排列組合

     		res = temp;	//準備進入下一個迴圈
     	}
     	return res;
    }
};

總是在解決題目或者是參考他人解答方法的過程中學到有用的小知識,很開心!