-17의 특별 되돌아 오는 Leetcode. 전화 번호, 편지 (전화 번호의 문자 조합)

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)); 
        } 
        
        
    } 
}

 

추천

출처www.cnblogs.com/qinyuguan/p/11317054.html