Leetcode [17]。電話番号、文字(電話番号の文字の組み合わせ)
件名の説明:
数字だけを考えると 2-9
、文字列、それが示されているすべての文字の組み合わせを返します。
(同じ電話キー)、次のように文字にデジタルマップを考えます。注1は任意のアルファベットに対応していません。
例:
输入: "23"
输出:[ "広告"、 "AE"、 "AF"、 "BD"、 "あること"、 "BF"、 "CD"、 "CE"、 "CF"]。
分析:
図に示すように、文字列の2-9 N数、文字に対応する数、これらの文字のすべての必要な組み合わせを含む所定の長さのタイトル要件。
我々は、対応する文字(例えば、2 ABCに対応する)に格納されたデジタル値を用いて、デジタルキー2-9を格納するマップを使用することができます。
再帰この問題を解決することができ、最初のインデックス列は、(例えばキー= 2、値=「ABC」)地図上のキーに対応する文字を採取し、そして値に引数に従って、= 0を入力しました次のプロセス。
以下で地図記憶処理:
地図<文字列、文字列>マップ= 新しい HashMapの<文字列、文字列> (){{ 入れ( "2"、 "ABC" ); 置く( "3"、 "DEF" ); (置く "4"、 "GHI" ); 置く( "5"、 "JKL" ); 置く( "6"、 "MNO" )。 プット( "7"、 "PQRS" )。 置く( "8"、 "TUV" ); 置く( "9"、 "WXYZ" ); }}。
その後、我々はできる、答えはリターンとしてList <string>を必要とし、見ることができます。
一覧<文字列> ANS = 新しい ArrayListを<>();
次の書き込み機能に、我々はDFSと呼ばれる関数を作成します。
公共 のボイド DFS(文字列の桁数、int型のステップ、文字列の答え){ 場合(ステップ== digits.length()){ ans.add(答); 返します。 } チャー C = digits.charAt(ステップ)。 文字列値 = map.get(C + "" )。 以下のために(int型 i = 0; i)は(value.lengthを<; iは++ ){ DFS(数字、ステップ + 1、答え+ value.charAt(I))。 } }
すべて一緒に、そして最終的にACコード:
クラスのソリューション{ 一覧 <文字列> ANS = 新しい ArrayListを<> (); 地図 <文字列、文字列>マップ= 新しい HashMapの<文字列、文字列> (){{ 入れ( "2"、 "ABC" ); 置く( "3"、 "DEF" ); (置く "4"、 "GHI" ); 置く( "5"、 "JKL" ); 置く( "6"、 "MNO" )。 プット( "7"、 "PQRS" )。 置く("8"、 "TUV" ); 置く( "9"、 "WXYZ" ); }}。 パブリックリストの<string> letterCombinations(文字列の数字){ 場合(digits.length()== 0 ||桁== NULL ) 戻りANS。 DFS(数字、 0、 "" ); 戻るANSを。 } 公共 ボイド DFS(文字列の数字、INTのステップは、文字列の答え){ 場合(ステップ== digits.length()){ ans.add(回答) 返します。 } チャー C = digits.charAt(ステップ)。 文字列値 = map.get(C + "" )。 にとって(int型 0 = Iと、iはvalue.lengthを(<); iは++ ){ DFS(数字、ステップ + 1、答え+ value.charAt(I))。 } } }