classSolution{privateLinkedList<String> res;privateLinkedList<String> path =newLinkedList<>();publicList<String>findItinerary(List<List<String>> tickets){Collections.sort(tickets,(a, b)-> a.get(1).compareTo(b.get(1)));
path.add("JFK");boolean[] used =newboolean[tickets.size()];backTracking((ArrayList) tickets, used);return res;}publicbooleanbackTracking(ArrayList<List<String>> tickets,boolean[] used){if(path.size()== tickets.size()+1){
res =newLinkedList(path);returntrue;}for(int i =0; i < tickets.size(); i++){if(!used[i]&& tickets.get(i).get(0).equals(path.getLast())){
path.add(tickets.get(i).get(1));
used[i]=true;if(backTracking(tickets, used)){returntrue;}
used[i]=false;
path.removeLast();}}returnfalse;}}
二、力扣51. N 皇后
classSolution{privateList<List<String>> res =newArrayList<>();publicList<List<String>>solveNQueens(int n){char[][] chessboard =newchar[n][n];for(char[] ch : chessboard){Arrays.fill(ch,'.');}fun(n,0, chessboard);return res;}privatevoidfun(int n,int row,char[][] chessboard){if(row == n){
res.add(arrayToStringFun(chessboard));return;}for(int i =0; i < n; i ++){if(isFlag(chessboard, n, row, i)){
chessboard[row][i]='Q';fun(n, row +1, chessboard);
chessboard[row][i]='.';}}}privateList<String>arrayToStringFun(char[][] chessboard){List<String> path =newArrayList<>();for(char[] ch : chessboard){
path.add(String.copyValueOf(ch));}return path;}privatebooleanisFlag(char[][] chessboard,int n,int row,int col){//判断列for(int i =0; i < n; i ++){if(chessboard[i][col]=='Q'){returnfalse;}}//判断45度for(int i = row-1, j = col-1; i >=0&& j >=0; i--, j--){if(chessboard[i][j]=='Q'){returnfalse;}}//判断135度for(int i = row-1, j = col+1; i >=0&& j < n; i--, j++){if(chessboard[i][j]=='Q'){returnfalse;}}returntrue;}}
三、力扣37. 解数独
classSolution{publicvoidsolveSudoku(char[][] board){fun(board);}privatebooleanfun(char[][] board){for(int i =0; i <9; i ++){for(int j =0; j <9; j ++){if(board[i][j]!='.'){continue;}for(char c ='1'; c <='9'; c ++){if(isfun(i, j, c, board)){
board[i][j]= c;if(fun(board)){returntrue;}else{
board[i][j]='.';}}}returnfalse;}}returntrue;}privatebooleanisfun(int i,int j,char c,char[][] board){//同行是否重复for(int a =0; a <9; a++){if(board[i][a]== c){returnfalse;}}//同列是否重复for(int b =0; b <9; b ++){if(board[b][j]== c){returnfalse;}}//九宫格内是否合规int startrRow =(i/3)*3;int startrCol =(j/3)*3;for(int a = startrRow; a < startrRow+3; a ++){for(int b = startrCol; b < startrCol +3; b ++){if(board[a][b]== c){returnfalse;}}}returntrue;}}