Menu
CoddyTech

Sudoku Solver

KhóQuay luipython iconjava iconcpp iconc iconjs icon+10

Bảng sudoku là một lưới 9 × 9 được chia thành chín ô vuông 3 × 3. Trong bảng đã giải, mỗi hàng, mỗi cột và mỗi ô vuông đều chứa mỗi chữ số từ 1 đến 9 đúng một lần.

Đề bài gồm 9 chuỗi, mỗi chuỗi tương ứng với một hàng, bắt đầu từ trên cùng; . biểu thị một ô trống. Điền vào tất cả ô trống và trả về bảng đã giải theo cùng định dạng. Bảng có đúng một lời giải.

Hàm

solveSudoku(board: string-array) → string-array
boardstring-array
9 hàng của câu đố, mỗi ô trống có một dấu chấm
Trả vềstring-array
9 hàng của bảng đã giải

Ràng buộc

  • board chứa 9 chuỗi có độ dài 9.
  • Mỗi ký tự là . hoặc một trong các chữ số từ 1 đến 9.
  • Các chữ số đã cho không bao giờ lặp lại trong cùng một hàng, cột hoặc ô.
  • Bảng có đúng một lời giải.

Ví dụ

Đầu vào
board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]
Đầu ra
["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]
Giải thích
Hàng trên cùng 9.7.....6 đã có 9, 7 và 6, nên sáu ô trống còn lại sẽ điền các số 1, 2, 3, 4, 5 và 8. Các cột và ô vuông sẽ quyết định vị trí của từng số, và hàng sẽ trở thành 957214386.
challenge icon

Câu hỏi mở rộng

Trong killer sudoku, tổng các ô trong mỗi lồng cũng phải bằng tổng đã cho. Bạn sẽ thêm quy tắc đó vào quá trình tìm kiếm như thế nào và dùng nó để cắt bỏ các nhánh từ sớm?

Đặt lại code
def solveSudoku(board):
    # Viết code vào đây

Kiểm thử #1

Đối số

board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]

Đầu ra mong đợi

["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]