LeetCode 第 36 题:有效的数独

2023-03-16  本文已影响0人  放开那个BUG

1、前言

图片.png

2、思路

本题的思路主要是用数组记录每行,每列,box 中的数映射的位置是否已经存在过,必须各一个数组记录。至于第几个 box 为什么是 i / 3 + (j / 3) * 3,只需要带入 box 就行。

3、代码

class Solution {
    public boolean isValidSudoku(char[][] board) {
        int m = board.length, n = board[0].length;
        boolean[][] rowMemo = new boolean[m][n];
        boolean[][] columnMemo = new boolean[m][n];
        boolean[][] boxMemo = new boolean[m][n];
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(board[i][j] == '.'){
                    continue;
                }

                int num = board[i][j] - '0';
                if(rowMemo[i][num - 1] || columnMemo[j][num - 1]){
                    return false;
                }
                rowMemo[i][num - 1] = true;
                columnMemo[j][num - 1] = true;

                // index 是第几个 box
                int index = i / 3 + (j / 3) * 3;
                if(boxMemo[index][num - 1]){
                    return false;
                }
                boxMemo[index][num - 1] = true;
            }
        }

        return true;
    }
}
上一篇下一篇

猜你喜欢

热点阅读