以下为我的天梯积分规则:
每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)
初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息)
坚持!!!
初级算法
刷题目录
数组
题干
请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
数独部分空格内已填入了数字,空白格用 ‘.’ 表示。
注意:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
示例1:
示例2:
直接判断法
分析:
我们需要查找再某行或某列及其3*3的宫内有无相同的数字,如果满足条件,则返回true;相反,则返回false.
本题难度中等
class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: res = True # 默认输出True # 判断行 for i in range(len(board)): dotCount = board[i].count('.') # 得到每一行中“.”的个数 rightCount = len(board[i]) - dotCount + 1 # 得到每一行中真实数字的数 judgeCount = len(set(board[i])) # 得到集合每一行的元素个数,由于set()会直接将多余的或者说相同的数,记为一个数,如:6,6,4,6,3. 输出得到的长度为3,而不是5,意思三个6,只保留一个6;且会从小到大,排序 if rightCount != judgeCount: # 判断两者的长度是否一直,若不一直则赋值FALSE res = False # 判断列 for i in range(len(board[0])): l = [] # 设置空数组存储 for j in range(len(board)): l.append(board[j][i]) # 将每列元素存入临时数组中 dotCount = l.count('.') # 计算“.”的个数 rightCount = len(board[0]) - dotCount + 1 # 得到每一列中数字的个数 judgeCount = len(set(l)) # 得到集合l的长度 if rightCount != judgeCount: res = False # 判断3*3宫内是否重复 for i in range(0, len(board), 3): for j in range(0, len(board[0]), 3): m = [] for k in range(i, i+3): for z in range(j, j+3): m.append(board[k][z]) dotCount = m.count('.') rightCount = len(m) - dotCount + 1 judgeCount = len(set(m)) if rightCount != judgeCount: res = False return res