文字列が数字だけ2-9が含まれて考えると、それは組み合わせが示されているすべての文字を返すことができます。
(同じ電話キー)、次のように文字にデジタルマップを考えます。注1は任意のアルファベットに対応していません。
例:
输入: "23"
输出:[ "広告"、 "AE"、 "BD" "AF"、 "あること"、 "BF"、 "CD"、 "CE"、 "CF"]。
出典:滞在ボタン(LeetCode)
//leetcode-cn.com/problems/letter-combinations-of-a-phone-number:リンク:httpsの
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
1は 数字のみ2-9含めると決定さの文字列を、それは組み合わせが示されているすべての文字を返します。 2 。3は、文字の次のマッピング番号(同一の電話キー)を与えます。注1は任意のアルファベットに対応していません。 4 5。 6。 7。 8。 9。 例: 10 。11入力: "23" 12出力:[ "広告"、 "AE "、 "AF"、 "BD"、 "である"、 "BF"、 "CD"、 "CE" 、 "CF" ] 13 14 ソース:滞在ボタン(leetCode) 15のリンク:HTTPS:// leetcode-CN。 COM /問題/コンビネーション・オブ・レター-A-電話番号16 のすべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。 17 18である 。19 20である パブリック クラスLeetcode17 { 21れる //定义一个マッピング集合用于记录数字键对应的字母 22 地図<文字列、文字列>電話= 新規 HashMapの<文字列、文字列> (){{ 23 プット( "2"、 "ABC" )。 24 プット( "3"、 "DEF" ); 25 プット( "4"、 "GHI" ); 26 プット( "5"、 "JKL" ); 27 プット( "6"、 "MNO" )。 28 プット( "7"、 "PQRS" )。 29 プット( "8"、 "TUV" ); 30 プット( "9"、 "WXYZ" ); 31 }}; 32 //は、それぞれの場合のために記憶されるメンバ変数の値を定義します。 33 一覧<文字列>出力= 新しいのArrayList <文字列> (); 34 パブリック 静的 ボイドメイン(文字列[]引数){ 35 リストの<string>文字列= 新しい Leetcode17()letterCombinations( "23" ); 36 のSystem.out.println(文字列); 37 } 38 // 桁用于存放输入的数字 39 パブリックリストの<string> letterCombinations(文字列の数字){ 40 であれば(digits.length()!= 0 ) 41 バックトラック( "" 、桁)。 42 リターン出力。 43 } 44 // 再帰的組み合わせは、一時文字列が結合されている表現、next_digits残りの数字を表し、 45 公共 ボイドバックトラック(組合せ文字列、文字列next_digits)は{ 46は // 、スプライシングが完了した組み合わせを表す再帰的な方法の出口、結果セット内に堆積。 47 IF(next_digits.length()== 0 ){ 48 output.add(組み合わせ); 49 } 他{ 50 // 最初のトラバースに取り込まれない残数 51である next_digits.substringのString桁=(0,1 ); 52 // 文字の全てに対応するデジタル取得し 53である 文字列の手紙= phone.get(桁の) 54である //)文字、長さ(横断する文字列表示その長さに文字列、文字列この方法ストリングの方法です。 55 のために(INT ; I <letters.length(); I = 0 I ++ ){ 56は、 //は文字トラバース 57である 文字列レター= phone.get(のための桁)が.substring(I、I + 1 ;) 58 // 再帰コールnext_digitsを(1).substringは、最初から最後の場所にすべての数字を表します。 59 バックトラック(+組み合わせレター、(1 next_digits.substring。 )); 60 61である } 62である } 63は、 64 } 65 } 66
输入:23
输出:[ad, ae, af, bd, be, bf, cd, ce, cf]
过程是:先取得"23"的第一位数字"2",然后取得对应的字符"abc",然后遍历"abc",继续调用递归函数 backtrack("a","23".substring(1)),所以参数还剩"3",
取得"3"对应的字符"def",然后遍历,在调用递归函数 backtrack("a"+"d","3".substring(1)),此时已经没有剩余的数字,就到了递归的的出口,把"ad"放入
结果集,然后回到上一层的for循环,递归调用 backtrack("a"+"e","3".substring(1))。。。。。