**號碼的字母組合
給定乙個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。
給出數字到字母的對映如下(與**按鍵相同)。注意 1 不對應任何字母。
示例:輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
說明:儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。
已經是二刷這道題了,中間還有複習過這道題,今天回想起來,只記得在backtrace(int len)中要不斷變化len的長度了。
我總結的回溯思想:回溯和遞迴很相似,都是屬於探索,計算機的思維。乙個簡單的例子,走迷宮,回溯是沿著一條路一直走下去,一直到頭 發現是死路,那麼返回。
每走到乙個分叉,都會分支成不同的路徑繼續探索下去。因此需要新增乙個返回的邊界條件if() return; 同時判斷不同的路徑進行不同backtrace()
核心還是回溯中間的過程,
思路:這道題的回溯思想是,digits的每個位數代表了探索的步數。"23"中的2,可以分支成「a,b,c",然後沿著a,b,c三條路繼續向後面新增字串,ad,ae,af,bd,be,bf,cd.ce.cf。
class知道總共有3*3種結果,我原本的思路是用兩層for迴圈來輸出,外層是digits.length(),內層是a[digits.charat(len)-'0'].length(),solution
void backtrace(string s,string digits,int len,listlist);
if(len==digits.length())
string chars=a[digits.charat(len)-'0'];
for(int i=0;i)}}
我忽略了回溯裡面有自然向下探索的機制。
思考的難點:list.add()應該新增在哪個地方,這是原來思考的**。我把backtrace的第三個引數複雜化了,直接從0開始非常簡潔。
LeetCode 電話號碼的字母組合
號碼的字母組合,是大家熟悉的字母九宮格鍵盤,按照題目要求盡可能的按照字母排序 所有的資料盤排列和下圖大致相當 解題思想是 相鄰的兩個數字中,第乙個數字所包含的字母是根節點,第二個數字包含的字母自動分配到每個根節點上,按照這種思想,我們只需要處理相鄰兩個數字,對每個根節點進行擴充套件,得到所有想要的組...
LeetCode 電話號碼的字母組合
給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 說明 儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。回溯演算法是不是很是陌生...
leetcode 電話號碼的字母組合
題目 給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。示例 輸入 23 輸出 ad ae af bd be bf cd ce cf include include using namespace std int main ...