題目
判斷一個(gè) 9x9 的數(shù)獨(dú)是否有效横侦。只需要根據(jù)以下規(guī)則,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可绰姻。
數(shù)字 1-9 在每一行只能出現(xiàn)一次枉侧。
數(shù)字 1-9 在每一列只能出現(xiàn)一次。
數(shù)字 1-9 在每一個(gè)以粗實(shí)線分隔的 3x3 宮內(nèi)只能出現(xiàn)一次狂芋。
數(shù)獨(dú)部分空格內(nèi)已填入了數(shù)字榨馁,空白格用 '.' 表示。
示例 1:
輸入:
[
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
輸出: true
示例 2:
輸入:
[
["8","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
輸出: false
解釋: 除了第一行的第一個(gè)數(shù)字從 5 改為 8 以外帜矾,空格內(nèi)其他數(shù)字均與 示例1 相同翼虫。
但由于位于左上角的 3x3 宮內(nèi)有兩個(gè) 8 存在, 因此這個(gè)數(shù)獨(dú)是無(wú)效的屑柔。
說(shuō)明:
一個(gè)有效的數(shù)獨(dú)(部分已被填充)不一定是可解的。
只需要根據(jù)以上規(guī)則珍剑,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可掸宛。
給定數(shù)獨(dú)序列只包含數(shù)字 1-9 和字符 '.' 。
給定數(shù)獨(dú)永遠(yuǎn)是 9x9 形式的招拙。
Swift解法
class Solution {
func isValidSudoku(_ board: [[Character]]) -> Bool {
if board.count != 9 {return false}
var box = [Int](repeating: 0, count: 9)
for i in 0..<9 {
if board[i].count != 9 {return false}
var flag1 = 0
var flag2 = 0
for j in 0..<9 {
if let value = board[i][j].asciiValue, value >= 49 && value < 58 {
let value = 1 << Int(value - 49)
let index = (i / 3) * 3 + j / 3
if box[index] | value != box[index] {
box[index] |= value
} else {
return false
}
if flag1 | value != flag1 {
flag1 |= value
} else {
return false
}
}
if let value = board[j][i].asciiValue, value >= 49 && value < 58 {
let value = 1 << Int(value - 49)
if flag2 | value != flag2 {
flag2 |= value
} else {
return false
}
}
}
}
return true
}
}
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-sudoku
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有唧瘾。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處别凤。