Diberikan n == 4, kembali [[".", "Q", ".". "], [.", ".", ".". ".". ".". " ".", ".", "."], [".", ".", "Q", "]],". ".". ".] , ["Q", ".", ".", "."], [. ",". ",". ",". ",". ",". " "."]]]]

Ini kode saya:

        def solveNQueens(self, n: int) -> List[List[str]]:
            ans=[]
            a=[['.' for j in range(n)] for i in range(n)]
           
            def valid(row, col):
                for i in range(n):
                    if a[i][col]=='Q':
                        return False
            
                for i in range(n):
                    if (row+i<n and col+i<n):
                        if a[row+i][col+i]=='Q':
                            return False
            
                for i in range(n):
                    if (row-i>=0 and col-i>=0):
                        if a[row-i][col-i]=='Q':
                            return False
            
                for i in range(n):
                    if (row-i>=0 and col+i<n):
                        if a[row-i][col+i]=='Q':
                            return False
                for i in range(n):
                    if (row+i<n and col-i>=0):
                        if a[row+i][col-i]=='Q':
                            return False
            
                return True
            
            def solver(rowNo):
                if rowNo == n:
                    
                  
                    ans.append(list(a))
                
                    return 
                
                for i in range(n):
                    if valid(rowNo, i):
                        a[rowNo][i]='Q'
                        solver(rowNo+1)
                        a[rowNo][i]='.'
                
                return 
            solver(0)
            return ans

Ketika saya memeriksa setiap waktu yang memungkinkan, kondisi dasar ditemui dalam fungsi solver, itu sedang memecahkan pertanyaan dengan benar. Namun, array yang ditambahkan dalam variabel ANS adalah mengubah referensi setiap kali saya mengubah a. Ini menghasilkan array ANS yang berisi dua daftar yang ditambahkan dalam keadaan awal mereka yang benar-benar kosong. Saya tidak mengerti mengapa. Tolong bantu saya mengerti.

0
Dinank Bista 28 Mei 2021, 23:49

1 menjawab

Jawaban Terbaik

Di baris ans.append(list(a))
Anda menyalin satu daftar,
tetapi Anda harus menyalin 8 dari mereka

Karena a terlihat seperti ini

a = [
    ['.', '.', 'Q', ...],
    [...               ],
    ...
]

Anda harus menyalin setiap elemen a
begitu

ans.append([inner.copy() for inner in a])
# I also recommend to use `.copy()` instead `list(original)` to copy
0
Superior 28 Mei 2021, 21:07