class Solution {
var rows = Array.init(repeating: [Character: Int](), count: 9)
var columns = Array.init(repeating: [Character: Int](), count: 9)
var boxes = Array.init(repeating: [Character: Int](), count: 9)
var spaces = [(Int, Int)]()
func solveSudoku(_ board: inout [[Character]]) {
for i in 0..<9 {
for j in 0..<9 {
let c = board[i][j]
if c == "." {
spaces.append((i, j))
} else {
rows[i][c] = 1
columns[j][c] = 1
boxes[i / 3 * 3 + j / 3][c] = 1
}
}
}
var index = 0
while index < spaces.count {
if place(board: &board, index: index) {
index += 1
} else {
guard index > 0 else {
return
}
index -= 1
}
}
}
func place(board: inout [[Character]], index: Int) -> Bool {
let location = spaces[index]
let i = location.0
let j = location.1
let box = i / 3 * 3 + j / 3
let c_temp = board[i][j]
for c in 1...9 {
let char = Character.init("\(c)")
if c_temp.asciiValue! >= char.asciiValue! {
continue
}
if rows[i][char] != nil || columns[j][char] != nil || boxes[box][char] != nil {
continue
}
rows[i][char] = 1
columns[j][char] = 1
boxes[box][char] = 1
board[i][j] = char
break
}
if c_temp != "." {
rows[i].removeValue(forKey: c_temp)
columns[j].removeValue(forKey: c_temp)
boxes[box].removeValue(forKey: c_temp)
}
if board[i][j] != c_temp {
return true
} else {
board[i][j] = "."
return false
}
}
}
Swift解数独,力扣第37题
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 题目描述(困难难度) 给定一个数独棋盘,输出它的一个解。 解法一 回溯法 从上到下,从左到右遍历每个空位置。在第一...
- Python小白 Leetcode刷题历程 No.36-No.40 有效的数独、解数独、外观数列、组合...
- 买卖股票的最佳时机 这是一个系列的题目,核心的解体思路是使用动态规划找到最优解 121 买卖股票的最佳时机(简单)...