题解 | #Sudoku#
Sudoku
https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
#递归真好用啊
import copy
def dif(l):
ls=[]
for i in range(1,10):
if i not in l:
ls.append(i)
return ls
dpwc=[]
def fun1(dp1):
global dpwc
for i in range(9):
for j in range(9):
if dp1[i][j]==0:
ls1=dif(dp1[i])
ls2=dif([dp1[k][j] for k in range(9)])
r,c=(i//3)*3,(j//3)*3
tmp=[]
for ii in range(r,r+3):
for jj in range(c,c+3):
tmp.append(dp1[ii][jj])
ls3=dif(tmp)
canl=[]
for x in ls1:
if x in ls2 and x in ls3:
canl.append(x)
for x in canl:
dp2=copy.deepcopy(dp1)
dp2[i][j]=x
fun1(dp2)
return
dpwc=dp1
dp=[list(map(int,input().split())) for _ in range(9)]
fun1(dp)
for i in range(9):
print(" ".join(map(str,dpwc[i])))

查看7道真题和解析