LeetCode刷题之36.有效的数独

LeetCode刷题之36.有效的数独

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

    1. 数字1-9在每一行只能出现一次。
    2. 数字1-9在每一列只能出现一次。
    3. 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。
      在这里插入图片描述

    上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示

  • 示例

示例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
解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
  • 说明:
    • 一个有效的数独(部分已被填充)不一定是可解的。
    • 只需要根据以上规则,验证已经填入的数字是否有效即可。
    • 给定数独序列只包含数字1-9和字符’.’。
    • 给定数独永远是9x9形式的。
  • 代码:
class Solution:
    def isValidSudoku(self,board):
# 判断方格里面数据是否冲突
        for i in range(1,8,3):
            for j in range(1,8,3):
                a,b = [],[]
                for x in range(i-1,i+2):
                    for y in range(j-1,j+2):
                        a.append(board[x][y])
                for t in filter(lambda x: x != ".", a):
                    b.append(int(t))
                if sum(b) == sum(set(b)):
                    continue
                if sum(b) != sum(set(b)):
                    return(False)
# 判断每列数据是否冲突
        for i in range(9):
            a,b = [],[]
            for j in range(9):
                a.append(board[j][i])
            for t in filter(lambda x: x != ".", a):
                b.append(int(t))
            if sum(b) == sum(set(b)):
                continue
            if sum(b) != sum(set(b)):
                return False
# 判断每行数据是否冲突
        for i in range(9):
            a = []
            board[i] = filter(lambda x: x != ".", board[i])
            for t in board[i]:
                a.append(int(t))
            if sum(a) == sum(set(a)):
                continue
            if sum(a) != sum(set(a)):
                return False
        return(True)
# 执行用时 :124 ms, 在所有 Python 提交中击败了29.18%的用户
# 内存消耗 :11.8 MB, 在所有 Python 提交中击败了14.45%的用
  • 算法说明:
    程序的主要思想是将每个判断元(每行、每列、每个3x3方格)里面的数据用set函数去重,然后用sum函数求和,与不去重求出的和比较是否相等,如果相等说明没有重复的元素,返回True,否则说明有重复元素,返回False。
    (1)第一个for循环,判断在每个3x3的方格里面的数据是否有冲突,用两层for循环找到每个方格的中心(1、4、7),(注意:设置遍历间隔为3),将中心元素及周围的9个元素找到(中心元素索引各加减1),用filter函数将其中的 ‘.’ 字符滤除掉,将数据转换为int型,然后去重、求和、比较;
    (2)第二个for循环,判断每列的数据是否有冲突,用两层for循环找到每列的元素,然后用filter函数将其中的 ‘.’ 字符滤除掉,将数据转换为int型,然后去重、求和、比较;
    (3)第三个for循环,判断每行的数据是否有冲突,用一层for循环找到每行的元素,然后用filter函数将其中的 ‘.’ 字符滤除掉,将数据转换为int型,然后去重、求和、比较。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

O_胡萝卜_O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值