| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 
 | 
 
 
 
 
 
 
 
 
 
 
 
 
 func totalNQueens(n int) int {
 
 res := make([][]string, 0)
 
 path := make([]string, 0)
 for i := 0; i< n ; i++ {
 path = append(path, strings.Repeat(".", n))
 }
 
 row := 0
 
 backtrack(row, path, &res)
 
 return len(res)
 }
 
 func backtrack(row int, path []string, res *[][]string) {
 if len(path) == row {
 temp := make([]string, len(path))
 copy(temp, path)
 *res = append(*res, temp)
 return
 }
 
 n := len(path)
 for col := 0; col<n; col++ {
 if !isConflict(path, row, col) {
 continue
 }
 
 rowBytes := []byte(path[row])
 rowBytes[col] = 'Q'
 path[row] = string(rowBytes)
 
 backtrack(row+1, path, res)
 
 rowBytes[col] = '.'
 path[row] = string(rowBytes)
 }
 }
 
 func isConflict(path []string, row, col int) bool {
 
 n := len(path)
 for i := 0; i < n; i++ {
 if path[i][col] == 'Q' {
 return false
 }
 }
 
 
 r := row-1
 c := col-1
 for r >= 0 && c >= 0 {
 if path[r][c] == 'Q' {
 return false
 }
 c = c - 1
 r = r - 1
 }
 
 
 r = row-1
 c = col+ 1
 for r >=0 && c < n {
 if path[r][c] == 'Q' {
 return false
 }
 c = c + 1
 r = r - 1
 }
 
 return true
 }
 
 
 |