`

Valid Sudoku 数独

阅读更多
Determine if a Sudoku is valid. The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

A partially filled sudoku which is valid.

Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

检测一个数独是否有效,数独的规则大家不明白的可以去百度一下。这里我们只需要检查当前的状态是否有效,而不用找到一个解。所以我们只要检查每行,每列以及没九个小方格内是否都没有重复数字出现就可以了。代码如下:
public class Solution {
    public boolean isValidSudoku(char[][] board) {
        HashSet<Character> set = new HashSet<Character>();
        for(int i = 0; i < board.length; i++) {
            for(int j = 0; j < board[0].length; j++) {
                if(set.contains(board[i][j])) 
                    return false;
                else if(board[i][j] != '.')
                    set.add(board[i][j]);
            }
            set.clear();
        }
        
        for(int i = 0; i < board[0].length; i++) {
            for(int j = 0; j < board.length; j++) {
                if(set.contains(board[j][i]))
                    return false;
                else if(board[j][i] != '.')
                    set.add(board[j][i]);
            }
            set.clear();
        }
        
        for(int m = 0; m < 3; m++) {
            for(int n = 0; n < 3; n++) {
                for(int i = 3 * m; i < 3 * m + 3; i++) {
                    for(int j = 3 * n; j < 3 * n + 3; j++) {
                        if(set.contains(board[i][j]))
                            return false;
                        else if(board[i][j] != '.')
                            set.add(board[i][j]);
                    }
                }
                set.clear();
            }
        }
        return true;
    }
}
0
2
分享到:
评论

相关推荐

    Sudoku solver in C++ (数独计算器)

    A Sudoku solver implemented in C++. It can solve a given Sudoku problem, or count the possibilities for all valid Sudoku grids.

    数独求解算法

    在这个情况下,它可能声明了一个数独类(如"Sudoku"),其中包含私有成员变量来存储数独盘面,以及公有成员函数,如"solve"(用于求解数独)、"is_valid"(用于验证填入的数字是否合法)等。 在实际的数独求解算法...

    Sudoku:数独方法

    在C++编程中,为了提高代码的可读性和复用性,可以将这些功能封装成类的方法,如`init_grid()`用于初始化数独网格,`read_input()`用于读取数独数据,`is_valid()`用于验证数独合法性,以及`solve_sudoku()`用于执行...

    9x9数独算法

    def is_valid(sudoku, row, col, num): # 检查行是否合法 for i in range(9): if sudoku[row][i] == num: return False # 检查列是否合法 for i in range(9): if sudoku[i][col] == num: return False # ...

    Sudoku:使用python pygame的数独游戏

    if num.isdigit() and int(num) in range(1, 10) and is_valid(sudoku, row, col, int(num)): sudoku[row][col] = int(num) draw_sudoku(sudoku) pygame.display.update() ``` 为了增加游戏的可玩性,我们需要...

    用Java实现N*N的标准数独及对角线数独解题

    在本文中,我们将深入探讨如何使用Java编程语言来实现N*N的标准数独及对角线数独解题算法。数独是一种逻辑游戏,玩家需要在9x9的网格中填入数字,使得每一行、每一列以及每一个宫(3x3的小方格)内的数字都从1到9不...

    Python求解数独并输出求解过程

    在代码中,可能会有一个`main`函数,它读取`sudoku_inputs`目录下的数独测试用例(可能是CSV或文本格式),然后调用`solve_sudoku`函数来解决这些数独,并在解决过程中记录每一步,最后打印出完整的解决方案。...

    matlab开发-Sudoku

    在MATLAB中开发数独(Sudoku)是一个有趣且具有挑战性的编程项目,它涉及到算法设计、逻辑推理以及矩阵操作等多个方面。数独是一种逻辑游戏,玩家需要在9x9的网格中填入数字,使得每一行、每一列以及9个3x3的小宫格...

    数独游戏生成数独谜题生成数独谜题

    ### 数独游戏开发知识点详解 #### 一、项目概述与技术选型 - **目标**:构建一个在线数独游戏,使用户能够通过Web界面体验数独的乐趣。 - **技术栈**: - **后端**:Python + Django - **前端**:...

    数独求解java算法附源码

    1. `isValid()`:检查给定的数字是否在当前行、列和宫格内合法。 2. `solve()`:主求解函数,使用回溯法尝试填充空单元格并递归解决。 3. `printSolution()`:打印出解的数独盘面。 在实现过程中,我们还需要考虑...

    C# 数独解题算法 简单明了

    - **基本情况**:如果已经填完了整个数独(即 `n` 达到了81),则记录解决方案并将当前的 `pu` 数组复制到 `sudoku` 和 `store` 中。 - **递归步骤**:对于每个空位,尝试填入1至9之间的数字,如果填入的数字合法,...

    数独人工解法的一些技巧及其python实现

    2. **基础函数**:创建`is_valid`函数检查一行、一列和一宫是否符合数独规则;`print_sudoku`函数用于打印数独盘面。 3. **回溯法**:这是最常用的数独求解算法,从第一个空格开始,尝试填充1-9的每个数字,如果...

    Python数独游戏.docx

    def is_valid(sudoku, row, col, num): # 检查行 for x in range(9): if sudoku[row][x] == num: return False # 检查列 for x in range(9): if sudoku[x][col] == num: return False # 检查 3x3 宫格 ...

    C++数独程序

    创建一个`Sudoku`类,包含成员变量(如二维数组表示的数独盘面)和成员函数(如`isValid`用于检查数字的安全性,`solve`用于递归求解数独)。 在压缩包中的"数独"文件可能是包含了完整的C++源代码文件,可能包括...

    数独小游戏-Python实现

    def is_valid_solution(sudoku): # ... pass ``` 然后,我们需要编写一个函数来显示数独网格。可以使用`print`函数配合字符串格式化,或者更高级的`pprint`库来美化输出: ```python def display_sudoku(sudoku)...

    python数独游戏.docx

    接着,调用`print_board`函数打印初始数独,然后调用`solve_sudoku`函数尝试解决数独。如果找到解决方案,再次打印解决后的数独;如果没有解,则输出"无解"。 综上所述,这个Python程序提供了一个完整的数独游戏...

    c++数独解法

    int sudoku[9][9]; ``` 接下来,我们需要实现一个函数来检查一个数独状态是否有效。这包括检查行、列和小宫格的合法性: ```cpp bool isValid(const int board[9][9], int row, int col, int num) { // 检查行 ...

    shudu_c.rar_数独 递归

    - 可能还有 `print_sudoku()` 函数:用于输出数独盘面,便于用户查看解算过程。 理解并分析这段代码,可以帮助我们深入学习递归算法以及如何将其应用到实际问题中,同时也能提升C语言编程技巧。通过实践和调试这个...

    sudoku:使用js实现数独游戏

    function isValid(sudoku) { // 检查行、列和小宫格 for (let row = 0; row ; row++) { if (!isValidRowCol(sudoku, row, 9)) return false; if (!isValidRowCol(sudoku, row, 1)) return false; } for (let ...

    使用python原创开发的数独求解器

    数独是一种广受欢迎的逻辑推理游戏,它基于9x9的格子,分为9个3x3的小九宫格。每个小九宫格内,玩家需要填入数字1到9,使得每一行、每一列以及每一个小九宫格内的数字都不重复。数独求解器则是利用计算机算法来自动...

Global site tag (gtag.js) - Google Analytics