Leetcode 51.N后问题
2024-08-30 22:46:06
N后问题
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例:
输入: 4
输出: [
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
import java.util.*; public class Solution{
public List<List<String>> solveNQueens(int n){
List<List<String>> res=new ArrayList<List<String>>();
int[] queenList=new int[n];//第i个位置存放的数表示row行时,Q的列
placeQueen(queenList,0,n,res);//在第0行放Q
return res;
} private void placeQueen(int[] queenList,int row,int n,List<List<String>> res){
if(row==n){
ArrayList<String> list=new ArrayList<String>();
for(int i=0;i<n;i++){
String str="";
for(int col=0;col<n;col++){
if(queenList[i]==col){
str+="Q";
}else{
str+=".";
}
}
list.add(str);
}
res.add(list);
}
for(int col=0;col<n;col++){
if(isValid(queenList,row,col)){
queenList[row]=col;
placeQueen(queenList,row+1,n,res);
}
}
} private boolean isValid(int[] queenList,int row,int col){
for(int i=0;i<row;i++){
int pos=queenList[i];
if(pos==col)
return false;
if(pos+row-i==col)
return false;
if(pos-row+i==col)
return false;
}
return true;
}
}
最新文章
- iOS可视化动态绘制八种排序过程
- Struts2第一个入门案例
- Android 怎么退出整个应用程序?
- CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
- Android各类权限意思祥解
- iOS检查App新版本并更新新版本
- yum clean all 是什么意思
- Delphi Virtual String Tree 基本用法
- k-折交叉验证(k-fold crossValidation)
- XAlign:用于代码对齐的Xcode插件
- flex 实时更新的一些方法总结
- 显示 mac 隐藏文件
- JS获取活动区域高和宽
- Ubuntu 安装wireshark
- Android权限解释
- How to make sure your machine is always online without sleep
- 两小时搞定C#版超级战舰游戏
- 圆方树简介(UOJ30:CF Round #278 Tourists)
- MemCache详细解读(转)
- CSS --记录