-52의 특별 되돌아 오는 Leetcode. N 여왕 II (N-퀸즈 II)
80 % 질문 (51) 내의 코드하지만 제 52의 솔루션들의 개수와 같이, 특히 51 개 찾는 솔루션은 51로 클릭
클래스 해결 { INT ANS = 0 ; 공개 INT totalNQueens ( INT의 N) { 숯 MP [] [] = 새 문자 [N] [N]; 위한 ( int로 ; i가 N <I는 I = 0 ++ ) { 대 ( INT의 J = 0; J <N; J ++ ) { MP [I] [J] = '입니다.' ; } } DFS (MP, N, 0, 0 ); 반환 ANS를; } 공공 공극 DFS ( 숯 [] [] MP, INTLEN은, int로 에서 의 INT {) 여왕 INT X = I / 렌; INT Y = %에서 LEN; 경우 ((x> = LEN || y를> = LEN)) { 경우 (! 퀸 = LEN) 창 ; ANS ++ ; 반환 ; } 의 Dfs (MP 렌에서 + 1 , 퀸); 경우 (OK (MP, LEN, X, Y)) { MP [X] [Y] = 'Q' ; DFS (MP에서, LEN, + 1, 퀸 + 1 ); MP [X] [Y]= '.' ; } } 공개 부울 확인 ( 숯 [] [] MP, INT LEN, INT (X), INT의 Y)는 { // 행 확인 을 위해 ( int로 ; 나는 LEN <I가 ++ I = 0 ) { 경우 (I == Y)가 계속 ; 경우 (MP는 [X] [I] == 'Q' ) 반환 거짓 ; } // COL을 확인 을 위해 ( int로 I = 0; I <렌; 내가 ++ ) { 만약(I == X) 계속 ; 경우 MP ([I] [Y]가 == 'Q' ) 반환 거짓 ; } // X = 1, Y = 3 의 INT CNT = 0 ; int로 최대 = 0 ; int로 다운 = 0 ; 대 ( int로 I = Y + 1; I <렌; 내가 ++ ) { 최대 = (++ CNT) * -1 + X; 아래 = CNT * 1 + X; 만약 (최대 <LEN &&까지> = 0 ) { //에서 System.out.println ( "MP [UP] [I] = ["+ 최대 + "["+ I + "]"); 경우 MP ([UP] [I] == 'Q' ) 반환 거짓 ; } 경우 (아래> = 0 && 아래 < LEN) { // 에서 System.out.println ( "MP [DOWN] [I] = ["+ 다운 + "["+ I + "]"); 경우 (MP는 [DOWN] [I] == 'Q' ) { 반환 거짓 ; } } } // 에서 System.out.println ( "기타"); CNT = 0 ; 위한 ( int로 난 Y = - 1; I> = 0;= (++ CNT) * -1 + X; 아래 = CNT * 1 + X; 만약 (최대 <LEN &&까지> = 0 ) { // 에서 System.out.println ( "MP [UP] [I] = ["+ 최대 + "["+ I + "]"); 경우 MP ([UP] [I] == 'Q' ) 반환 거짓 ; } 경우 (아래> = 0 && 아래 < LEN) { // 에서 System.out.println ( "MP [DOWN] [I] = ["+ 다운 + "["+ I + "]"); 경우 (MP는 [DOWN] [I] == 'Q' ) { 반환 거짓 ; ; } }