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" ); }};
그런 다음 우리가 할 수있는 대답은 반환으로 목록 <문자열> 필요로 볼 수 있습니다 :
목록 <문자열> ANS = 새로운 ArrayList를 <> ();
쓰기 기능 옆에, 우리는 기능은 DFS라는 만들 :
공개 공극 DFS (문자열 숫자, INT의 단계 문자열 않음) { 경우 (단계 == digits.length ()) { ans.add (답); 반환 ; } 숯 C = digits.charAt (단계); 문자열 값 = map.get (c + "" ); 위한 ( int로 I = 0; I)이 (value.length를 <; 내가 ++ ) { 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" ); }}; 공개 목록 <문자열> letterCombinations (문자열 자리) { 경우 (digits.length () == 0 || 자리 == null이 ) 반환 ANS; DFS (숫자 0 ' " ); 반환 ANS를; } 공공 공극 DFS (문자열 숫자, INT의 단계 문자열 않음) { 경우 (단계 == digits.length ()) { ans.add (답); 반환 ; } 숯 C = digits.charAt (단계); 문자열 값 = map.get (c + "" ); ...에 대한( int로 0 = 1을, 난을 value.length (<); 나는 ++ ) { DFS (숫자, 단계 + 1, + 않음 value.charAt (I)); } } }