题目
代码
import org
.junit
.Test
;
import java
.util
.ArrayList
;
import java
.util
.Arrays
;
import java
.util
.List
;
public class T0051 {
@Test
public void test() {
System
.out
.println(solveNQueens(0));
}
private List
<List
<String>> res
;
public List
<List
<String>> solveNQueens(int n
) {
res
= new ArrayList<>();
if (n
== 0) { return res
; }
String
[][] board
= new String[n
][n
];
int[] map
= new int[n
];
for (int i
= 0; i
< n
; i
++) {
map
[i
] = -1;
}
helper(board
, 0, 0, map
);
return res
;
}
public void helper(String
[][] board
, int i
, int j
, int[] map
) {
if (i
< 0) { return; }
if (j
>= board
.length
) {
map
[i
] = -1;
helper(board
, i
-1, 0, map
);
return;
}
if (i
>= board
.length
) {
System
.out
.println(Arrays
.toString(map
));
addRes(map
);
helper(board
, i
-1, 0, map
);
return;
}
if (map
[i
] == -1) {
if (check(board
, i
, j
)) {
board
[i
][j
] = "Q";
map
[i
] = j
;
helper(board
, i
+1, 0, map
);
}else {
helper(board
, i
, j
+1, map
);
}
}else {
j
= map
[i
];
map
[i
] = -1;
board
[i
][j
] = ".";
helper(board
, i
, j
+1, map
);
}
}
public void addRes(int[] map
) {
List
<String> list
= new ArrayList<>();
for (int i
= 0; i
< map
.length
; i
++) {
StringBuilder sb
= new StringBuilder();
for (int j
= 0; j
< map
.length
; j
++) {
if (map
[i
] != j
) {
sb
.append('.');
}else {
sb
.append('Q');
}
}
list
.add(sb
.toString());
}
res
.add(list
);
}
public boolean check(String
[][] board
, int i
, int j
) {
for (int m
= 0; m
< board
.length
; m
++) {
if ("Q".equals(board
[i
][m
])) { return false; }
if ("Q".equals(board
[m
][j
])) { return false; }
}
for (int m
= 1; i
-m
>= 0 && j
-m
>= 0; m
++) {
if ("Q".equals(board
[i
-m
][j
-m
])) { return false; }
}
for (int m
= 1; i
+m
< board
.length
&& j
+m
< board
.length
; m
++) {
if ("Q".equals(board
[i
+m
][j
+m
])) { return false; }
}
for (int m
= 1; i
-m
>= 0 && j
+m
< board
.length
; m
++) {
if ("Q".equals(board
[i
-m
][j
+m
])) { return false; }
}
for (int m
= 1; i
+m
< board
.length
&& j
-m
>= 0; m
++) {
if ("Q".equals(board
[i
+m
][j
-m
])) { return false; }
}
return true;
}
}
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-queens 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ↩︎
转载请注明原文地址:https://tech.qufami.com/read-10784.html