前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 有效的数独 - LeetCode

Swift 有效的数独 - LeetCode

作者头像
韦弦zhy
发布2018-09-11 12:47:46
8010
发布2018-09-11 12:47:46
举报
题目:两数之和
描述:

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

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

image

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

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

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

代码如下:

代码语言:javascript
复制
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中开始做初级算法这一章节,将做的题目在此做个笔记吧。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:两数之和
    • 描述:
      • 用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记吧。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档