🌗 36. 有效的数独

吞佛童子2022年10月10日
  • algorithm
  • array
小于 1 分钟

🌗 36. 有效的数独

难度: 🌗

问题描述

img_1.png


解法

class Solution {
    int len = 9;
    public boolean isValidSudoku(char[][] board) {
        // 思路:
        // 依次判断每条条件
        for(int i = 0; i < len; i ++) {
            for(int j = 0; j < len; j ++) {
                if(board[i][j] == '.') {
                    continue;
                } else { 
                    if(!isValid(board, i, j)) {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    private boolean isValid(char[][] board, int row, int col) {
        char cur = board[row][col];
        for(int i = 0; i < len; i ++) {
            if(i == row || board[i][col] == '.') {
                continue;
            }
            if(board[i][col] == cur) {
                return false;
            }
        }
        for(int j = 0; j < len; j ++) {
            if(j == col || board[row][j] == '.') {
                continue;
            }
            if(board[row][j] == cur) {
                return false;
            }
        }
        // 所在 3 * 3 方格
        int m = 3 * (row / 3);
        int n = 3 * (col / 3);
        for(int i = m; i < m + 3; i ++) {
            for(int j = n; j < n + 3; j ++) {
                if(i == row && j == col) {
                    continue;
                }
                if(board[i][j] == '.') {
                    continue;
                }
                if(board[i][j] == cur) {
                    // System.out.println(i + "  " + j  + "  " + board[i][j] + "  " + cur);
                    return false;
                }
            }
        }
        return true;
    }
}

输出

img.png

上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou