Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

Lines changed: 49 additions & 0 deletions
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

Lines changed: 9 additions & 4 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /