0037.解数独:优化排版,补充Swift版本

This commit is contained in:
bqlin
2021-12-18 13:55:22 +08:00
parent 879886acb3
commit eb721afa35

View File

@ -61,7 +61,7 @@
代码如下:
```
```cpp
bool backtracking(vector<vector<char>>& board)
```
@ -504,5 +504,54 @@ void solveSudoku(char** board, int boardSize, int* boardColSize) {
}
```
### Swift
```swift
func solveSudoku(_ board: inout [[Character]]) {
// 判断对应格子的值是否合法
func isValid(row: Int, col: Int, val: Character) -> Bool {
// 行中是否重复
for i in 0 ..< 9 {
if board[row][i] == val { return false }
}
// 列中是否重复
for j in 0 ..< 9 {
if board[j][col] == val { return false }
}
// 9方格内是否重复
let startRow = row / 3 * 3
let startCol = col / 3 * 3
for i in startRow ..< startRow + 3 {
for j in startCol ..< startCol + 3 {
if board[i][j] == val { return false }
}
}
return true
}
@discardableResult
func backtracking() -> Bool {
for i in 0 ..< board.count { // i行坐标
for j in 0 ..< board[0].count { // j列坐标
guard board[i][j] == "." else { continue } // 跳过已填写格子
// 填写格子
for val in 1 ... 9 {
let charVal = Character("\(val)")
guard isValid(row: i, col: j, val: charVal) else { continue } // 跳过不合法的
board[i][j] = charVal // 填写
if backtracking() { return true }
board[i][j] = "." // 回溯:擦除
}
return false // 遍历完数字都不行
}
}
return true // 没有不合法的,填写正确
}
backtracking()
}
```
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>