mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
0037.解数独:优化排版,补充Swift版本
This commit is contained in:
@ -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>
|
||||
|
Reference in New Issue
Block a user