給定乙個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。
給出數字到字母的對映如下(與**按鍵相同)。注意 1 不對應任何字母。
示例:
輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
說明:
儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。
因為給出的號碼字串長度不定, 用常規的迴圈巢狀難以實現. 本題可以使用遞迴解決, 本文依舊使用迴圈法.(如輸入數字為 「233」)
第一步先處理號碼只有一位的情況的答案
[「a」,「b」,「c」]
當進行第 i 步時, 會有前 i 步 已經找好的組合, 用這些已經找好的組合再與新的號碼組
([「a」,「b」,「c」]與[「d」,「e」,「f」]組合結果為[「ad」, 「ae」, 「af」, 「bd」, 「be」, 「bf」, 「cd」, 「ce」, 「cf」].)
如果還有還有第三位以及更多位的數字, 反覆執行第二步直到數字用完.
(此時找[「ad」, 「ae」, 「af」, 「bd」, 「be」, 「bf」, 「cd」, 「ce」, 「cf」] 與 [「d」,「e」,「f」] 的組合)
/*
*給定乙個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。
*給出數字到字母的對映如下(與**按鍵相同)。注意 1 不對應任何字母。
**示例:
**輸入:"23"
*輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
*/#include
#include
#include
#include
#include
using
namespace std;
ostream&
operator
<<
(ostream& os, vector
& v)
os <<
'"'<<
*(v.
end()-
1)<<
'"'<<
']';
return os;
}class
solution,,
,,,,
,,};
// 當輸入數字只有一位的處理
vector ans =
;for
(int i =
0; i < tellphone[digits[0]
].size()
; i++
)// 當大於等於兩位數字的處理
for(
int i =
1; i < digits.
size()
; i++);
// 初始化新的 結果
// 把前n步找到所有組合 與 下一組號碼組進行組合
for(
int j =
0; j < tellphone[digits[i]].
size()
; j++
)}
ans = new_ans;
// 新的組合賦值舊組合
}return ans;}}
;int
main()
; solution solv;
auto ans = solv.
lettercombinations
(digits)
;sort
(ans.
begin()
, ans.
end())
; cout << ans << endl;
return0;
}
class
solution
;private list
answer =
newarraylist
<
>()
;public list
lettercombinations
(string digits)
// 遞迴
// digits 代表還沒有用到的**數字, temp是已經嘗試過來的字串
public
void
recuir
(string digits, string temp)}}
}
力扣 17 電話號碼的字母組合
c 刷題學習筆記目錄 c 百萬併發網路通訊 筆記目錄 回溯三步法 字串到字母的對映 同樣是使用 演算法套路 回溯篇 回溯三步法 中提到的回溯三步法 但是剛開始使用了unordered map來進行數字 字母的對映,所以略顯麻煩,看到 隨想錄 大佬的題解回溯演算法 號碼的字母組合,原來可以使用stri...
力扣17 電話號碼的字母組合
原題 解法1 2都是大佬寫的,題解鏈結 1 回溯 1 class solution 2def lettercombinations self,digits str list str 3if not digits return 45 phone 1314 defbacktrack conbinatio...
17題電話號碼的字母組合
給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。手機九鍵輸入對應關係 示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 說明 儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。題...