leetcode hard模式专杀之51. N-Queens
来源:互联网 发布:手机mac地址是什么 编辑:程序博客网 时间:2024/06/02 21:27
继续leetcode hard模式, 八皇后问题的一般版,这种举一反三的题目值得好好琢磨,典型的回溯法,思路就不多说了,上代码,注意一一些边界条件的细节:
public class Solution { public List<String> transfer(int[] q){ List<String> result = new ArrayList<>(); for(int i = 0; i<q.length; i++){ StringBuilder sb = new StringBuilder(); for(int j=0; j<q.length; j++){ if(j==q[i]){ sb.append("Q"); }else{ sb.append("."); } } result.add(sb.toString()); } return result; } public List<List<String>> solveNQueens(int n) { List<List<String>> result = new ArrayList<>(); int[] q=new int[n]; for(int i = 0 ; i<n; i++){ enumerate(result, i, q, 0); } return result; } public boolean isConsistent(int[] q, int line, int index){ if(line==0){ return true; }else{ for(int i=0; i<line;i++){ //i行q[i]列 vs line行index列 if(q[i]==index){ //同列 return false; } if(index-q[i]==line-i){ return false; } if(index-q[i]==i-line){ return false; } } return true; } } public void enumerate(List<List<String>> result, int index, int[] q, int line){ if(line==q.length-1){ if(isConsistent(q, line, index)){ q[line] = index; result.add(transfer(q)); } }else if(line == 0){ q[line] = index; for(int j = 0; j<q.length; j++){ enumerate(result, j, q, line+1); } }else{ if(isConsistent(q, line, index)){ q[line] = index; for(int j = 0; j<q.length; j++){ enumerate(result, j, q, line+1); } } } }}
阅读全文
0 0
- leetcode hard模式专杀之51. N-Queens
- leetcode hard模式专杀之52 N-Queens II
- Leetcode 51. N-Queens && 52. N-Queens II(Hard)
- Leetcode 51. N-Queens (Hard) (cpp)
- leetcode解题笔记 51.N-Queens [Hard]
- 51. N-Queens Hard
- 51.leetcode N-Queens(hard)[递归回溯剪枝]
- [Leetcode 51, hard] N-Queens I
- [Leetcode 52, Hard] N Queens II
- Leetcode 52. N-Queens II (Hard) (cpp)
- LeetCode之N-Queens
- LeetCode 51. N-Queens
- LeetCode --- 51. N-Queens
- LeetCode 51.N-Queens
- [Leetcode] 51. N-Queens
- [leetcode] 51.N-Queens
- [leetcode] 51. N-Queens
- LeetCode 51. N-Queens
- mac上命令行的快捷键和vim的快捷键
- 文件的上传+下载+表单的重复提交问题 +自定义拦截器:
- 在hive中虚构dual表
- JSP操作XML
- 蚊式噪声
- leetcode hard模式专杀之51. N-Queens
- socklen_t在windows和linux平台下的头文件定义
- 灵云TTS(语音合成)
- 阿里云服务器部署方案(nginx+tomcat+mysql)
- 关键词标记
- 【android】Gif合成
- 18105 银行的叫号顺序
- USACO section 1.3 Wormholes
- K&R《C程序设计语言》p15:统计各个数字、空白符及其他字符出现的次数