Skip to content

Commit d0d7673

Browse files
committed
20190409
1 parent 71a611a commit d0d7673

File tree

2 files changed

+58
-4
lines changed

2 files changed

+58
-4
lines changed

code/lc51.java

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package code;
2+
/*
3+
* 51. N-Queens
4+
* 题意:8皇后问题
5+
* 难度:Hard
6+
* 分类:Backtracking
7+
* 思路:回溯+判断,注意怎么判断两个斜线方向
8+
* Tips:
9+
*/
10+
import java.util.ArrayList;
11+
import java.util.HashSet;
12+
import java.util.List;
13+
14+
public class lc51 {
15+
StringBuilder ss = new StringBuilder();
16+
HashSet<String> hs = new HashSet();
17+
public List<List<String>> solveNQueens(int n) {
18+
for (int i = 0; i < n-1 ; i++) {
19+
ss.append(".");
20+
}
21+
return dfs(new ArrayList<>(), new ArrayList(), n, 0);
22+
}
23+
24+
public List<List<String>> dfs(List<List<String>> res, List curr, int n, int row){
25+
if(row==n){
26+
res.add(new ArrayList<>(curr));
27+
return res;
28+
}
29+
for (int i = 0; i < n ; i++) {
30+
if(isValid(row, i)){
31+
curr.add(new StringBuilder(ss).insert(i,"Q").toString());
32+
int a = row+i; // row+col 作为key
33+
int b = row-i; // row-col 作为key
34+
hs.add("row"+row); hs.add("col"+i); hs.add("k1"+a); hs.add("k2"+b);
35+
dfs(res, curr, n, row+1);
36+
curr.remove(curr.size()-1);
37+
hs.remove("row"+row); hs.remove("col"+i); hs.remove("k1"+a); hs.remove("k2"+b); //别忘了删掉
38+
}
39+
}
40+
return res;
41+
}
42+
43+
public boolean isValid(int row, int col){
44+
int a = row+col;
45+
int b = row-col;
46+
if(hs.contains("row"+row)||hs.contains("col"+col)||hs.contains("k1"+a)||hs.contains("k2"+b)) return false;
47+
return true;
48+
}
49+
}

readme.md

+9-4
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ LeetCode 指南
3535
| 009 [Java](./code/lc9.java)
3636
| 010 [Java](./code/lc10.java)
3737
| 011 [Java](./code/lc11.java)
38-
| 013 [Java](./code/lc13java)
39-
| 014 [Java](./code/lc14java)
40-
| 015 [Java](./code/lc15java)
41-
| 016 [Java](./code/lc16java)
38+
| 013 [Java](./code/lc13.java)
39+
| 014 [Java](./code/lc14.java)
40+
| 015 [Java](./code/lc15.java)
41+
| 016 [Java](./code/lc16.java)
4242
| 017 [Java](./code/lc17.java)
4343
| 019 [Java](./code/lc19.java)
4444
| 020 [Java](./code/lc20.java)
@@ -66,6 +66,7 @@ LeetCode 指南
6666
| 048 [Java](./code/lc48.java)
6767
| 049 [Java](./code/lc49.java)
6868
| 050 [Java](./code/lc50.java)
69+
| 051 [Java](./code/lc51.java)
6970
| 053 [Java](./code/lc53.java)
7071
| 054 [Java](./code/lc54.java)
7172
| 055 [Java](./code/lc55.java)
@@ -220,4 +221,8 @@ LeetCode 指南
220221
| 746 [Java](./code/lc746.java)
221222
| 771 [Java](./code/lc771.java)
222223
| 877 [Java](./code/lc877.java)
224+
| 921 [Java](./code/lc921.java)
225+
| 922 [Java](./code/lc922.java)
226+
| 923 [Java](./code/lc923.java)
227+
| 978 [Java](./code/lc978.java)
223228
| 983 [Java](./code/lc983.java)

0 commit comments

Comments
 (0)