Swift 有效的数独 - LeetCode

题目:两数之和

描述:

判断一个数独是否有效,根据:Sudoku Puzzles – The Rules
(数独规则: 每一行不能有重复的数字;每一列不能有重复的数字;将数独框划分为三行三列,没9个小方格不能有重复;)

数独部分填了数字,空的部分用 '.' 表示。

《Swift 有效的数独 - LeetCode》 image

一个部分填充是有效的数独。

说明:
一个有效的数独(填了一部分的)不一定是可解的,只要已经填的数字是有效的即可。

思路:
根据题意及数独的规则,只需要判断每一行的数字,每一列的数字和9宫格的数字有没有重复即可。可以用Set进行解题。board[i][j]表示行,board[j][i]表示列,当i 和 j 对 3 进行求余为0时,表示一个9宫格。

代码如下:

class Solution {
    //有效的数独
    func isValidSudoku(_ board: [[Character]]) -> Bool {
  
        var rowSet = Set<Character>()
        var colSet = Set<Character>()
        
        for i in 0..<9 {
            
            rowSet.removeAll()
            colSet.removeAll()
            
            for j in 0..<9 {
                
                if i % 3 == 0 && j % 3 == 0 {
                    
                    //检查块
                    if !checkBlock(board, row: i, col: j) {
                        return false
                    }
                
                }
                
                if board[i][j] != "." {
                    
                    //检查行
                    if rowSet.contains(board[i][j]) {
                        return false
                    }
                    rowSet.insert(board[i][j])
                }
                
                if board[j][i] != "." {
                    
                    //检查列
                    if colSet.contains(board[j][i]) {
                        return false
                    }
                    colSet.insert(board[j][I])
                }
            }
        }
        return true
    }
    
    //检查块是否有效
    private func checkBlock(_ board: [[Character]], row: Int, col: Int) -> Bool {
        var blockSet = Set<Character>()
        for i in row..<(row + 3) {
            for j in col..<(col + 3) {
                if board[i][j] != "." {
                    if blockSet.contains(board[i][j]) {
                        return false
                    }
                    blockSet.insert(board[i][j])
                }
            }
        }
        return true
    }
}
用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记吧。
    原文作者:韦弦Zhy
    原文地址: https://www.jianshu.com/p/2b6f221fd995
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞