-79의 주제 되돌아 오는 Leetcode. 단어 검색 (단어 검색)

-79의 주제 되돌아 오는 Leetcode. 단어 검색 (단어 검색)


 

단어가 그리드에 있는지 여부를 알아 내기 위하여 2 차원 그리드 단어를 감안할 때.

단어하며, 수평 또는 수직으로 인접하는 셀 인접한 "인접"셀 순으로 구성하고, 인접 셀 내의 문자에 의해. 동일 셀 내 편지는 재사용 할 수 없습니다.

예 :

보드 = 
[ 
  [ 'A', 'B', 'C', 'E'], 
  [ 'S', 'F.', 'C', 'S'], 
  [ 'A', 'D', 'E ','E '] 
] 

= "ABCCED"주어진 단어는. true를 돌려 
= "페이지의"단어 주어진 true를 반환합니다. 
= "ABCB"단어 주어진 false를 반환합니다.



분석 :
지도 감안할 때, (오른쪽, 위, 아래, 왼쪽) 기간 후 경로를 찾을 수는 주어진 단어를 형성 할 수있다.
문제 문제의 고전적인지도 + 다시 유형, 문제는지도를 통해 사라 여부를 제어 할 마주 배열을 필요로
되돌릴 수 있도록 없습니다.
전과 여행 할 때 마주 [X] [Y] = 1, 가지 마세요.
힘 [X] [Y] = 0이 앞서간를 나타낸다 갈 수있다.


AC 코드 :
클래스 솔루션 {
    부울 플래그 = 거짓 ;
    INT dirx [] = 새로운  INT [{1, -1,0,0 };
    INT diry [] = 새로운  INT [{0,0,1, -1 };
    공개  부울 존재 ( [] [] 보드 단어 문자열) {
         경우 (board.length == 0 || word.equals ( "" )) {
                 반환  거짓 ; 
        } 
        CHAR 제 word.charAt = (0 );
        위한 ( int로 I = 0; I <board.length은, 내가 ++ ) {
             ( INT의 J = 0; J <보드 [0] .length; J ++ ) {
                 경우 (보드 [I] [J] == 제) {
                     INT 힘 [] [] = 새로운  INT [board.length] 보드 [0 ].길이]; 
                    힘 [I]은 [J]를 1 = ; 
                    DFS (보드, 힘, I, J, 단어, 1 ); 
                    힘 [I]은 [J]를 = 0 ; 
                } 
            } 
        } 
        반환 플래그를; 
    } 
    
    공공  공극 DFS (  [] [] 보드 INT 힘 [] [], INT (X),INT의 Y 문자열 워드, 값 int {) 지금
         의 경우 (현재 == word.length ()) { 
            플래그 = ;
            반환 ; 
        } 
        경우 (플래그) ; 
        
        INT m = board.length;
        INT의 N = 보드 [0 ] .length; 
        
        위한 ( int로 ; I <4] I = 0 난 ++ ) {
             INT XX = X + dirx [I];
            INT YY Y + = diry [I];
            경우 (XX> = 0 && XX <m && YY> = 0 && YY <N && 힘 [XX] [YY] == 0 && 보드 [XX] [YY] ==word.charAt (현재)) { 
                힘 [XX] [YY] = 1 ; 
                DFS (보드, 마주, 지금 XX, YY, 단어, +1 ); 
                힘 [XX] [YY] = 0 ; 
            } 
        } 
        
        
    } 
}

 

추천

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