Hard
The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle. You may return the answer in any order.
Each solution contains a distinct board configuration of the n-queens’ placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.
Example 1:

Input: n = 4
Output: [[“.Q..”,”…Q”,”Q…”,”..Q.”],[”..Q.”,”Q…”,”…Q”,”.Q..”]]
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above
Example 2:
Input: n = 1
Output: [[“Q”]]
Constraints:
1 <= n <= 9To solve the “N-Queens” problem in Swift with the Solution class, follow these steps:
solveNQueens in the Solution class that takes an integer n as input and returns a list of lists of strings.n x n. Initialize all cells to '.', indicating an empty space.backtrack to explore all possible configurations of queens on the board.backtrack function:
    row is equal to n, it means we have successfully placed n queens on the board. Add the current board configuration to the result.col from 0 to n - 1:
        (row, col) by calling a helper function isSafe.(row, col) on the board, mark it as 'Q'.backtrack(row + 1).(row, col) by marking it as '.'.solveNQueens method, initialize an empty list result to store the solutions.backtrack function with initial parameters 0 for the row index.result list containing all distinct solutions.Here’s the implementation of the solveNQueens method in Swift:
public class Solution {
    public func solveNQueens(_ n: Int) -> [[String]] {
        var pos = [Bool](repeating: false, count: n + 2 * n - 1 + 2 * n - 1)
        var pos2 = [Int](repeating: 0, count: n)
        var ans = \[\[String]]()
        helper(n, 0, &pos, &pos2, &ans)
        return ans
    }
    private func helper(_ n: Int, _ row: Int, _ pos: inout [Bool], _ pos2: inout [Int], _ ans: inout [[String]]) {
        if row == n {
            construct(n, pos2, &ans)
            return
        }
        for i in 0..<n {
            let index = n + 2 * n - 1 + n - 1 + i - row
            if pos[i] || pos[n + i + row] || pos[index] {
                continue
            }
            pos[i] = true
            pos[n + i + row] = true
            pos[index] = true
            pos2[row] = i
            helper(n, row + 1, &pos, &pos2, &ans)
            pos[i] = false
            pos[n + i + row] = false
            pos[index] = false
        }
    }
    private func construct(_ n: Int, _ pos: [Int], _ ans: inout [[String]]) {
        var sol = [String]()
        for r in 0..<n {
            var queenRow = [Character](repeating: ".", count: n)
            queenRow[pos[r]] = "Q"
            sol.append(String(queenRow))
        }
        ans.append(sol)
    }
}
This implementation efficiently finds all distinct solutions to the N-Queens problem using backtracking.