首先使用string類的數(shù)組存儲(chǔ)每個(gè)數(shù)字對應(yīng)的所有可能的字母,然后進(jìn)行回溯操作。
string arr[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
回溯過程中維護(hù)一個(gè)字符串,表示已有的字母排列(如果未遍歷完電話號碼的所有數(shù)字,則已有的字母排列是不完整的)。該字符串初始為空。每次取電話號碼的一位數(shù)字,從哈希表中獲得該數(shù)字對應(yīng)的所有可能的字母,并將其中的一個(gè)字母插入到已有的字母排列后面,然后繼續(xù)處理電話號碼的后一位數(shù)字,直到處理完電話號碼中的所有數(shù)字,即得到一個(gè)完整的字母排列。然后進(jìn)行回退操作,遍歷其余的字母排列。
回溯算法用于尋找所有的可行解,如果發(fā)現(xiàn)一個(gè)解不可行,則會(huì)舍棄不可行的解。在這道題中,由于每個(gè)數(shù)字對應(yīng)的每個(gè)字母都可能進(jìn)入字母組合,因此不存在不可行的解,直接窮舉所有的解即可。
但是思路易想,實(shí)現(xiàn)難,回溯我們這里就采用多路遞歸,比較難想的就是要考慮清楚遞歸的時(shí)候要傳什么變量去控制遞歸的深度,然后需要考慮是函數(shù)調(diào)用時(shí)是傳值?還是傳引用,下面代碼定義的vector
就是要存每一次拼接好的字符串就需要用傳引用調(diào)用,那么這里就還需要定義一個(gè)string類型的combine;
來完成一個(gè)拼接的功能,用范圍for去讓數(shù)字所代表的字符串逐個(gè)進(jìn)入遞歸函數(shù)中,用times
控制遞歸次數(shù),這個(gè)次數(shù)times
如果和digits.size()
相等,那么就將拼接好的字符串尾插到combine
中。
class Solution {public:
void Combine(vector&MyString, int times, string digits, string combine)
{string arr[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
if (times == digits.size())
{MyString.push_back(combine);
return;
}
for (auto ch : arr[digits[times] - '0'])
{Combine(MyString, times + 1, digits, combine + ch);
}
}
vectorletterCombinations(string digits) {
vectorMyString;//最終組合好的vector
if (digits.size() == 0)//當(dāng)這個(gè)字符串是空串的時(shí)候,直接返回就行
{return MyString;
}
string combine;//靠他完成一個(gè)拼接的功能
int times = 0;//控制遞歸次數(shù)
Combine(MyString, times, digits, combine);//遞歸函數(shù)
return MyString;
}
};
調(diào)試演示下面是當(dāng)digiets為字符串“2”時(shí)的調(diào)試演示。
下面是當(dāng)digiets為字符串“23”時(shí)的調(diào)試演示。
好了今天的分享就到此為止了
最后:如果你覺得對你有用就一鍵三連吧,哪里有沒看懂的地方或者哪里有錯(cuò)誤可以在評論區(qū)留言歡迎批評指正,作者看到的話會(huì)第一時(shí)間回復(fù)。
end
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:C++——電話號碼的字母組合問題-創(chuàng)新互聯(lián)
標(biāo)題來源:http://chinadenli.net/article2/dojgic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、域名注冊、動(dòng)態(tài)網(wǎng)站、網(wǎng)站策劃、品牌網(wǎng)站制作、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容