From d31158bef92552905aa08a56e9b6da8f37b118fe Mon Sep 17 00:00:00 2001 From: shantanujoshi25 Date: Sun, 15 Feb 2026 15:50:41 -0800 Subject: [PATCH] Completed --- Problem_1.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ Problem_2.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 Problem_1.py create mode 100644 Problem_2.py diff --git a/Problem_1.py b/Problem_1.py new file mode 100644 index 00000000..8d34be1c --- /dev/null +++ b/Problem_1.py @@ -0,0 +1,44 @@ +class Solution: + def solveNQueens(self, n: int) -> List[List[str]]: + sol = [] + board = [[False for i in range(n)] for i in range(n)] + cols = set() + diags = set() # row - col + anti_diags = set() # row + col + + def recur(row): + if row == n: + temp = [] + for i in range(n): + s = '' + for j in range(n): + if board[i][j]: + s = s + 'Q' + else: + s = s + '.' + temp.append(s) + sol.append(temp) + return + + for i in range(n): + # O(1) conflict check instead of O(n) loops! + if i in cols or (row - i) in diags or (row + i) in anti_diags: + continue + + # Place queen + board[row][i] = True + cols.add(i) + diags.add(row - i) + anti_diags.add(row + i) + + recur(row + 1) + + # Backtrack - remove queen + board[row][i] = False + cols.remove(i) + diags.remove(row - i) + anti_diags.remove(row + i) + + recur(0) + return sol + \ No newline at end of file diff --git a/Problem_2.py b/Problem_2.py new file mode 100644 index 00000000..77ca2226 --- /dev/null +++ b/Problem_2.py @@ -0,0 +1,31 @@ +# // Time Complexity : O(2^n) +# // Space Complexity : O(n) +class Solution: + def exist(self, board: List[List[str]], word: str) -> bool: + n = len(board) + m = len(board[0]) + + def recur(i, j, wrd_idx): + if wrd_idx == len(word): + return True + + if i < 0 or i >= n or j < 0 or j >= m or board[i][j] != word[wrd_idx]: + return False + + temp = board[i][j] + board[i][j] = '#' + + found = (recur(i-1, j, wrd_idx+1) or + recur(i+1, j, wrd_idx+1) or + recur(i, j-1, wrd_idx+1) or + recur(i, j+1, wrd_idx+1)) + + board[i][j] = temp + return found + + for i in range(n): + for j in range(m): + if recur(i, j, 0): + return True + + return False \ No newline at end of file