栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode36.有效的数独(Python,C)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode36.有效的数独(Python,C)

解题思路

题目并没有让我们对数独进行解题,那么我们只要保证数独每一个数的“合法性”,想要保证数独的“合法性”那么就要符合题目给的3个条件。

条件:

1.数字1-9在每一行只能出现一次

2.数字1-9在每一列只能出现一次

3.数字1-9在一个以实粗实线分隔的3x3宫内只能出现一次.

注意事项:

1.一个有效的数独不一定是可解的

2.只要根据条件验证填入的数字是否“合法”即可

3.空白格用'.'表示

实现思路(伪代码)

首先可以创建3个二维数组,也就是哈希表,然后判断出现过的数字是否重复了。

前两个的实现比较简单,重点是第三个。

先说一下实现方法公式   y / 3 + (x / 3) * 3

9*9的board是由9个3*3的小board组成的,那么我们将大board拆分成3个小board

 

代码(Python)

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        row = [[0] * 10 for _ in range(9)]
        col = [[0] * 10 for _ in range(9)]
        box = [[0] * 10 for _ in range(9)]
        for i in range(9):
            for y in range(9):
                if board[i][y] == '.':
                    continue
                num = int(board[i][y])
                if row[i][num] != 0 or col[y][num] != 0 or box[y // 3 + (i // 3) * 3][num] != 0:
                    return False
                row[i][num],col[y][num],box[y // 3 + (i // 3) * 3][num] =1,1,1
        return True

代码(C)

bool isValidSudoku(char** board, int boardSize, int* boardColSize)
{
    int row[9][9];
    int col[9][9];
    int box[9][9];
    for(int i = 0;i < 9;i++)
    {
        for(int y = 0;y < 9;y++)
        {
            if(board[i][y] == '.')
            {
                continue;
            }
            char c = board[i][y];
            int num = c - '0' - 1;
            if (row[i][num] == 1 || col[y][num] == 1 || box[y / 3 + (i / 3) * 3][num] == 1)
            {
                return 0;
            }
            row[i][num] = 1;
            col[y][num] = 1;
            box[y / 3 + (i / 3) * 3][num] = 1;
            
        }
    }
    return 1;
}

运行

 

 

 

 

 

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号