前言
两周没有更新博客了,一个是赶上中秋放假,一个是最近再参加一个比赛,忙的一批,也就没有刷题和写博客。。。
这个排名的规则好像变了,我的排名一下子从130W+变到了10W+,简直是羞愧难当呀,就发这么几篇水博客还能这样,以后要勤发博客了,要不然都对不起这个排名了。。。
问题描述
解决方案
这个只是让验证当前是否合法,那就按照数独的规则一行,一列,一个九宫格地验证呗,可以使用hash表也可以使用数组,来保存某个值在这一行,以及列和九宫格是出现过,如果没有则标记为1,如果已经出现了,那就说明肯定不合法,直接返回假即可,如果所有的元素都判断完,那就返回真。主要的需要注意的是九宫格转换为线性对应关系。代码如下:
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
row = [[False for i in range(9)]for j in range(9)]
col = [[False for i in range(9)]for j in range(9)]
rec = [[False for i in range(9)]for j in range(9)]
for i in range(9):
for j in range(9):
if board[i][j]!='.':
k = int(board[i][j])-1
if row[k][i]==True:# k这个数是否已经在第i行出现过
return False
else:
row[k][i]=True# k这个数是否已经在第j列出现过
if col[k][j]==True:
return False
else:
col[k][j]=True
n = int(int(i/3)*3+int(j/3))
# print(n)
if rec[k][n]==True:# k这个数是否已经在第n个九宫格出现过
return False
else:
rec[k][n]=True
return True
总结
刚开始还以为是要解数独题,后来一看原来只是要看是否合法,很高兴就把题做了,但是下一题就是让解数独的。。。躲得过初一,躲不过十五呀。。。 后面的那个题就国庆假期再写吧。。。。