defsolveNQueens(self,n:int) -> List[List[str]]: ans = [] self.dfs(0, n, [], ans)return ansdefdfs(self,row,n,cands,ans):if row == n: ans.append(self.build(cands))for idx inrange(n):if self.isValid(cands,idx):# print(row) self.dfs(row+1, n, cands + [idx], ans)defisValid(self,cands,idx): n =len(cands)for i inrange(n): diff =abs(cands[i] - idx)if diff ==0or diff == (n - i):# 跟第i層的距離returnFalsereturnTruedefbuild(self,cands): grid = []for idx in cands: line =''for j inrange(len(cands)): line +='Q'if j == idx else'.' grid.append(line)return grid
130. Surrounded Regions
Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'.
A region is captured by flipping all 'O's into 'X's in that surrounded region.
掃描邊界,遇到'O', dfs翻成'*'
遍歷每一層,遇到'*'翻回'O', 遇到'O'翻成'X'
defsolve(self,board: List[List[str]]) ->None:ifnot board:return self.m, self.n =len(board),len(board[0])# trasere the border and mark all 'o' to '#'for i in [0, self.m-1]:for j inrange(self.n):if board[i][j] =='O': self.dfs(i, j, board)for i inrange(1, self.m-1):for j in [0, self.n-1]:if board[i][j] =='O': self.dfs(i, j, board)# mark 'O' to 'X', '#' to Ofor i inrange(self.m):for j inrange(self.n):if board[i][j] =='*': board[i][j] ='O'elif board[i][j] =='O': board[i][j] ='X'defdfs(self,i,j,board): board[i][j] ='*'for dy, dx in ((0,1), (1,0), (0,-1), (-1,0)): y = i + dy x = j + dxifnot (0<= y < self.m and0<= x < self.n):continueif board[y][x] =='O': self.dfs(y, x, board)