最外層迴圈遍歷給定的源串,比如"234",比如遍歷到第乙個字元2,對應的字串為"abc"
進入第二層迴圈,先得出當前已得到的res的長度,這一步最關鍵,詳細說明如下:
設定乙個變數vector res用來儲存最終的結果;初始為空字串,很關鍵,這樣在遍歷第乙個字元2的時候,會將2對應的每乙個子串寫入到res中,此時res為。當繼續遍歷第二個字元3的時候,先求得res的長度為3,這樣可以遍歷到每乙個子串"a", "b", "c",然後拿每乙個子串去與當前的3對應"def"依次相加(這是第三層迴圈),得到新的子串集合,,即為更新之後的res。後面的以此類推。
class
solution ;
}vector
dict ;
vector
res ; // 最開始設為只有乙個空字串的集合
for (int i = 0; i < digits.size(); i++)
}res = res2;
}return res;
}};複製**
顧名思義,深度優先即,比如digits為"234",2->"abc", 3->"def", 4->"ghi",則深度搜尋會先得到adg,adh,adi,然後得到aeg,aeh,aei也就是先以最後乙個數字對應的字元完整遍歷一遍,與上面的思路相反。
最核心的地方在於dfs函式的中止條件 level == digits.size() 這表示一次遍歷的結束,得到了乙個完整的結果集中的乙個子串,然後進入下一次遍歷。具體參考**注釋。
class
solution ;
dfs(digits,dict,0,"",res);
return res;
}// 引數digits為源串,disc為對應的字典,level即為當前走到的數字的index,out為當前已累積的子串,res為最終結果
void
dfs(string digits, string dict, int level, string out, vector
& res)
else }}
};複製**
電話號碼的字母組合
給乙個數字字串,每個數字代表乙個字母,請返回其所有可能的字母組合。下圖的手機按鍵圖,就表示了每個數字可以代表的字母。樣例給定 23 返回 ad ae af bd be bf cd ce cf 注意以上的答案是按照詞典編撰順序進行輸出的,不過,在做本題時,你也可以任意選擇你喜歡的輸出順序。class ...
電話號碼的字母組合
給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映關係如下 示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 注 輸出字串順序任意 我的 public class lettercombinationsofaphonenumber public...
電話號碼的字母組合
這是一道我刷題時遇到的乙個題目,很簡單,輸入數字,輸出這些數字構成的字元排列組合 由可以看出。given a string containing digits from 2 9 inclusive,return all possible letter combinations that the nu...