【LeetCode】36. Valid Sudoku 解题报告(Python)

127 篇文章 2 订阅
102 篇文章 2 订阅

题目分析:

这一题比较简单,甚至我觉得有耐心可以不用循环写出来(滑稽),用循环就时取出每行、每列、每个小格子里非’.'的值,再判断是否有重复值即可,可以用set或者dict取判断,我觉得dict要简单一些,不存在就加进去,存在返回False。
在这里插入图片描述
关于行列没什么说的,而小格子的坐标有点难度,[int(i/3)*3 + int(j/3)]可以理解为第几个小格子,[int(i%3)*3 + int(j%3)]可以理解为小格子中的第几个元素,你可以写几个格子的坐标找一下这个规律。

测试代码:

class Solution:
    def isValidSudoku(self, board):
        for i in range(9):
            #分别储存一行,一列,一个小方格
            heng, shu, fang = {}, {}, {}
            for j in range(9):
                #行,首先排除'.'
                if board[i][j] != '.':
                    #不在则加入字典,在了就是重复返回False
                    if board[i][j] not in heng: heng.update({board[i][j]:0})
                    else:   return False
                #列,首先排除'.'
                if board[j][i] != '.':
                    # 不在则加入字典,在了就是重复返回False
                    if board[j][i] not in shu: shu.update({board[j][i]:0})
                    else:   return False
                #小方格,首先排除'.',[int(i/3)*3 + int(j/3)]可以理解为第几个小格子,[int(i%3)*3 + int(j%3)]可以理解为小格子中的第几个元素
                if board[int(i/3)*3 + int(j/3)][int(i%3)*3 + int(j%3)] != '.':
                    # 不在则加入字典,在了就是重复返回False
                    if board[int(i/3)*3 + int(j/3)][int(i%3)*3 + int(j%3)] not in fang: fang.update({board[int(i/3)*3 + int(j/3)][int(i%3)*3 + int(j%3)]:0})
                    else:   return False
        return True

print(Solution().isValidSudoku([
  ["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"]
])) #提交时请删除print
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值