public class Test {
// private static List<List<Integer>> res=new ArrayList<>();
private static List<List<Integer>> res=new LinkedList<>();
public static void main(String[] args) {
// System.out.println(permute(new int[] {1,2,3}));
System.out.println(solveNQueens(5));
}
// 全排列问题
// public static List<List<Integer>> permute(int[] nums){
// LinkedList<Integer> path=new LinkedList<>();
// backtrack(nums, path);
// return res;
// }
// private static void backtrack(int[] nums,LinkedList<Integer> path) {
// if(path.size()==nums.length) {
// res.add(new LinkedList<Integer>(path));
// return;
// }
// for(int n:nums) {
// if(path.contains(n))continue;
// path.add(n);
// backtrack(nums, path);
// path.removeLast();
// }
// }
// n皇后问题
public static List<List<Integer>> solveNQueens(int n) {
LinkedList<Integer> path=new LinkedList<>();
backtrack(path, 0, n);
return res;
}
private static void backtrack(LinkedList<Integer> path,int row,int n) {
if(row==n) {
res.add(new LinkedList<Integer>(path));
return;
}
for(int col=0;col<n;col++) {
if(isValid(path, row, col)) {
path.add(col);
backtrack(path, row+1, n);
path.removeLast();
}
}
}
private static boolean isValid(LinkedList<Integer> path,int row,int col) {
if(path.size()==0)return true;
if(path.contains(col))return false;
if(path.getLast()==col-1||path.getLast()==col+1)return false;
return true;
}
}
全排列问题和n皇后问题。
正则表达式匹配问题:
public boolean isMatch(String s, String p) {
if(p.isEmpty())return s.isEmpty();
boolean first_match=(!s.isEmpty()&&(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.'));
if(p.length()>1&&p.charAt(1)=='*') {
return isMatch(s, p.substring(2))||(first_match&&isMatch(s.substring(1),p));
}
else
return first_match&&isMatch(s.substring(1), p.substring(1));
}