提交 d0d76735 编写于 作者: L liu13

20190409

上级 71a611aa
package code;
/*
* 51. N-Queens
* 题意:8皇后问题
* 难度:Hard
* 分类:Backtracking
* 思路:回溯+判断,注意怎么判断两个斜线方向
* Tips:
*/
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class lc51 {
StringBuilder ss = new StringBuilder();
HashSet<String> hs = new HashSet();
public List<List<String>> solveNQueens(int n) {
for (int i = 0; i < n-1 ; i++) {
ss.append(".");
}
return dfs(new ArrayList<>(), new ArrayList(), n, 0);
}
public List<List<String>> dfs(List<List<String>> res, List curr, int n, int row){
if(row==n){
res.add(new ArrayList<>(curr));
return res;
}
for (int i = 0; i < n ; i++) {
if(isValid(row, i)){
curr.add(new StringBuilder(ss).insert(i,"Q").toString());
int a = row+i; // row+col 作为key
int b = row-i; // row-col 作为key
hs.add("row"+row); hs.add("col"+i); hs.add("k1"+a); hs.add("k2"+b);
dfs(res, curr, n, row+1);
curr.remove(curr.size()-1);
hs.remove("row"+row); hs.remove("col"+i); hs.remove("k1"+a); hs.remove("k2"+b); //别忘了删掉
}
}
return res;
}
public boolean isValid(int row, int col){
int a = row+col;
int b = row-col;
if(hs.contains("row"+row)||hs.contains("col"+col)||hs.contains("k1"+a)||hs.contains("k2"+b)) return false;
return true;
}
}
......@@ -35,10 +35,10 @@ LeetCode 指南
| 009 [Java](./code/lc9.java)
| 010 [Java](./code/lc10.java)
| 011 [Java](./code/lc11.java)
| 013 [Java](./code/lc13java)
| 014 [Java](./code/lc14java)
| 015 [Java](./code/lc15java)
| 016 [Java](./code/lc16java)
| 013 [Java](./code/lc13.java)
| 014 [Java](./code/lc14.java)
| 015 [Java](./code/lc15.java)
| 016 [Java](./code/lc16.java)
| 017 [Java](./code/lc17.java)
| 019 [Java](./code/lc19.java)
| 020 [Java](./code/lc20.java)
......@@ -66,6 +66,7 @@ LeetCode 指南
| 048 [Java](./code/lc48.java)
| 049 [Java](./code/lc49.java)
| 050 [Java](./code/lc50.java)
| 051 [Java](./code/lc51.java)
| 053 [Java](./code/lc53.java)
| 054 [Java](./code/lc54.java)
| 055 [Java](./code/lc55.java)
......@@ -220,4 +221,8 @@ LeetCode 指南
| 746 [Java](./code/lc746.java)
| 771 [Java](./code/lc771.java)
| 877 [Java](./code/lc877.java)
| 921 [Java](./code/lc921.java)
| 922 [Java](./code/lc922.java)
| 923 [Java](./code/lc923.java)
| 978 [Java](./code/lc978.java)
| 983 [Java](./code/lc983.java)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册