LC 有效的数独

Posted yangbocsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC 有效的数独相关的知识,希望对你有一定的参考价值。

LC 有效的数独

请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
数独部分空格内已填入了数字,空白格用 ‘.’ 表示。



【1.0】

class Solution {
    public boolean isValidSudoku(char[][] board) {
        boolean isFlag = true;
        for (int i = 0; i < board.length; i++)
        {
            for (int j = 0; j < board[i].length; j++)
            {
                for (int k = j+1; k < board[i].length - j - 1; k++)
                {
                    if (board[i][j] == board[i][k] && board[i][j] != '.')
                    {
                        isFlag = false;
                        break;
                    }
                }

                for (int k = i+1; k < board[i].length - j - 1; k++)
                {
                    if (board[i][j] == board[k][j] && board[i][j] != '.')
                    {
                        isFlag = false;
                        break;
                    }
                }
                if (isFlag==false)
                    break;
            }
            if (isFlag==false)
                break;
        }
        return isFlag;
    }
}

【2.0】

class Solution {
    public boolean isValidSudoku(char[][] board) {
        int length = board.length;
        int[][] line = new int[length][length];
        int[][] column = new int[length][length];
        int[][] cell = new int[length][length];
        for (int i = 0; i < length; i++)
        {
            for (int j = 0; j < length; j++)
            {
                if (board[i][j] == '.')//如果还没有填数字,直接跳过
                    continue;
                int num = board[i][j] - '0' - 1;  //将当前格子字符转换为数字
                int k = i / 3 * 3 + j / 3 ; //k是第几个单元格,9宫格数独横着和竖着都是3个单元格
                if (line[i][num] != 0 || column[j][num] != 0 || cell[k][num] != 0)
                    return false;
                //表示第i行有num这个数字,第j列有num这个数字,对应的单元格内也有num这个数字
                line[i][num] = column[j][num] = cell[k][num] = 1;
                
            }
        }
        return true;
    }
}

以上是关于LC 有效的数独的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--36有效的数独

java刷题--36有效的数独

LeetCode题目--有效的数独(python/Java实现)

36.有效的数独

leetcode-----36. 有效的数独

36. 有效的数独