class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
box={}
box2={}
runloop=False
for i,line in enumerate(board):
for j,c in enumerate(line):
box[(i,j)]=0
if c!='.':
box[(i,j)]=(1<<(int(c)-1))
else:
box2[(i,j)]=(1<<9)-1
runloop=True
for loop in xrange(81):
for i in xrange(0,9):
for j in xrange(0,9):
if box[(i,j)]!=0: continue
for i0 in xrange((i/3)*3, (i/3)*3+3):
for j0 in xrange((j/3)*3, (j/3)*3+3):
box2[(i,j)]&=~box[(i0,j0)]
for i0 in xrange(0, 9):
box2[(i,j)]&=~box[(i0,j)]
box2[(i,j)]&=~box[(i,i0)]
for i in xrange(0,9):
for j in xrange(0,9):
if box[(i,j)]!=0:
continue
if box2[(i,j)] == 0:
return False
if (~box2[(i,j)]+1)&box2[(i,j)] == box2[(i,j)]:
box[(i,j)]=box2[(i,j)]
return True
标准答案明显有误,算法不解释了。