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 买卖股票的最佳时机(简单)...