From 45d8592f6a773691059df8f061a19e159f546bd8 Mon Sep 17 00:00:00 2001 From: Manassa2000 Date: Sat, 15 Nov 2025 12:08:50 -0500 Subject: [PATCH] Backtracking-3 --- NQueens.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ WordSearch.java | 35 ++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 NQueens.java create mode 100644 WordSearch.java diff --git a/NQueens.java b/NQueens.java new file mode 100644 index 00000000..ef4c3ffb --- /dev/null +++ b/NQueens.java @@ -0,0 +1,67 @@ +// Time Complexity :O(n*n!) n: checking isValid, n!: to place n queens in n rows +// Space Complexity :O(n^2)+O(n) +// Did this code successfully run on Leetcode :yes +import java.util.ArrayList; +import java.util.List; + +class Solution { + public List> solveNQueens(int n) { + List> answer = new ArrayList<>(); + boolean[][] board = new boolean[n][n]; + helper(board,0,n,answer); + return answer; + } + private void helper(boolean[][] board, int row, int n,List> answer) { + if (row == n) {//there is a queen in each row + List list = new ArrayList<>(); + for (int i = 0; i < n; i++) { + StringBuilder sb = new StringBuilder();//build a string for each row + for (int j = 0; j < n; j++) { + if (board[i][j]) { + sb.append("Q"); + } else { + sb.append("."); + } + } + list.add(sb.toString());//add row to list + } + answer.add(list);//add list to answer + return; + } + for (int j = 0; j < n; j++) { + if (isValid(board, row, j, n)) { + //action + board[row][j] = true; + //recurse + helper(board, row + 1, n,answer); + //backtrack + board[row][j] = false; + } + } + } + private boolean isValid(boolean[][] board, int i, int j, int n) { + int r = i, c = j; + while (r >= 0) {//up + if (board[r][c]) + return false; + r--; + } + r = i; + c = j; + while (r >= 0 && c >= 0) {//upper left diagonal + if (board[r][c]) + return false; + r--; + c--; + } + r = i; + c = j; + while (r >= 0 && c < n) {//upper right diagonal + if (board[r][c]) + return false; + r--; + c++; + } + return true; + } +} diff --git a/WordSearch.java b/WordSearch.java new file mode 100644 index 00000000..62b0b261 --- /dev/null +++ b/WordSearch.java @@ -0,0 +1,35 @@ +// Time Complexity :O(m*n*4^L) L: Length of word +// Space Complexity :O(L) +// Did this code successfully run on Leetcode :yes +class Solution { + int m,n; + int direction[][]; + public boolean exist(char[][] board, String word) { + m = board.length; + n = board[0].length; + direction = new int[][]{{-1,0},{1,0},{0,1},{0,-1}}; + for(int i=0;i