题解 | 简单迭代一下#Sudoku#

Sudoku

https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1


def check(l):
    ref = set(map(str,[1,2,3,4,5,6,7,8,9]))
    # return sorted(list(ref - set(map(str,l))))
    return ref - set(map(str,l))

def block(M, a, b):
    m,n = a//3, b//3
    temp = M[3*m:3*m+3]
    temp = [x[3*n:3*n+3] for x in temp]
    return temp[0] + temp[1] + temp[2]

mm = []
while True:
    try:
        mm.append(list(map(int, input().split())))
    except:
        break

def fillout(m):
    for i in range(9):
        for j in range(9):
            if m[i][j] == 0:
                temp = list(check(m[i]) & check([x[j] for x in m]) & check(block(m,i,j)))
                if temp != []:
                    sq = [x[:] for x in m]
                    for k in temp:
                        sq[i][j] = int(k)
                        ans = fillout(sq)
                        if ans:
                            return ans
                        else:
                            continue
                    if ans == False:
                        return False
                    else:
                        return sq
                else:
                    return False
            elif i == j == 8:
                return m
                # m[i][j] = list(check(m[i]) & check([x[j] for x in m]) & check(block(m,i,j)))[0]
mmm = fillout(mm)

for line in mmm:
    print(' '.join(list(map(str,line))))

全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
程序员牛肉:这一眼假啊,基本上都是骗人的,不然就涉及到职位贪腐了,就像之前华为的OD事件,看你运气好不好了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务