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