初级算法题遇到的问题 求大佬帮忙看一下哪里出问题了

路过的大佬麻烦帮我看一下 为啥条件为False 还是进入if了 晕了

class Solution(object):
def verify_line(self, board, x, y):
for i in range(9):
if board[i][y] == board[x][y] and i != x:
return False
if board[x][i] == board[x][y] and i != y:
return False
if x == y or x + y == 8:
for k in range(9):
if board[k][k] == board[x][y] and k != x:
return False
if board[k][8 - k] == board[x][y]:
if k != x or k - 8 != x:
return False
return True
def verify_sudoku(self, board, x, y):
for p in range(3):
for q in range(3):
if board[x][y] == board[x + p - x % 3][y + q - y % 3]:
if p - x % 3 != 0 or q - y % 3 != 0:
return False
return True
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
for u in range(9):
for o in range(9):
if board[u][o] != ".":
if not (self.verify_line(board, u, o) and self.verify_sudoku(board, u, o)):
return False
return True

old_board = [[".", "8", "7", "6", "5", "4", "3", "2", "1"],
["2", ".", ".", ".", ".", ".", ".", ".", "."],
["3", ".", ".", ".", ".", ".", ".", ".", "."],
["4", ".", ".", ".", ".", ".", ".", ".", "."],
["5", ".", ".", ".", ".", ".", ".", ".", "."],
["6", ".", ".", ".", ".", ".", ".", ".", "."],
["7", ".", ".", ".", ".", ".", ".", ".", "."],
["8", ".", ".", ".", ".", ".", ".", ".", "."],
["9", ".", ".", ".", ".", ".", ".", ".", "."]]

这个是出错的board值

实在不理解 有没有大佬说一下为啥0.0

https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2f9gg/

这个是原算法题

回答

class Solution(object):
    def verify_line(self, board, x, y):
        for i in range(9):
            if board[i][y] == board[x][y] and i != x:
                return False
            if board[x][i] == board[x][y] and i != y:
                return False
        # 没注意看题目 多此一举 验证了对角线......
        # if x == y or x + y == 8:
        #     for k in range(9):
        #         if board[k][k] == board[x][y] and k != x:
        #             return False
        #         if board[k][8 - k] == board[x][y] and k != x:
        #             return False
        return True

    def verify_sudoku(self, board, x, y):
        for p in range(3):
            for q in range(3):
                if board[x][y] == board[x + p - x % 3][y + q - y % 3]:
                    if p - x % 3 == 0 and q - y % 3 == 0:
                        continue
                    return False
                    # if p - x % 3 != 0 or q - y % 3 != 0:
                    #     return False
        return True

    def isValidSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: bool
        """
        for u in range(9):
            for o in range(9):
                if board[u][o] != ".":
                    if not (self.verify_line(board, u, o) and self.verify_sudoku(board, u, o)):
                        return False
        return True

改变思路 其实在排除自己本身的时候 只需验证x,y是否等于当前循环到的点的坐标 而不需要考虑其他情况 毕竟 需要排除掉的也就只有这一种情况 就算要验证也应该是8 - k != y而不是8 - k != x 一开始就错了.....

最后就是断点的问题 其实 到目前为止还不理解为啥取到了x=0,y=1的时候 有空再研究一下

 

以上是初级算法题遇到的问题 求大佬帮忙看一下哪里出问题了的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>