力扣 36.有效的数独(c语言)

1.题目描述

2.思路讲解 

1.一开始看通过率这么高以为很好做,但发现并不是那么回事,对我来说难度挺大

难点在怎么去想到用哈希表,以及如何分割开每个3x3的矩形,去判断是否有重复的数

2.引用

力扣https://leetcode-cn.com/problems/valid-sudoku/solution/36-jiu-an-zhao-cong-zuo-wang-you-cong-shang-wang-x/这位大神,对分割矩形块讲的很好,我也是借鉴了他的思路,最后给自己做一个总结

3.图解

1.rows数组代表我们为记录每一行的数,所创建的哈希表。(其中rows每一行代表9x9表格中的每一行)。

2.columns数组代表我们记录每一列的数,所创建的哈希表。(其中columns每一行代表9x9表格中的没一列)。

3.box数组代表我们记录每一个3x3的表格中的数,所创建的哈希表。(其中box每一行代表不同的3x3矩形块)。

3.代码展示

bool isValidSudoku(char** board, int boardSize, int* boardColSize){
    int row[9][10]={0};
    int columns[9][10]={0};
    int box[9][10]={0};
//上面分别创建三个哈希表
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            if(board[i][j]=='.')
            {
                continue;
            }
            int nums=board[i][j]-'0';//这个是转化,使字符变成数字
            if(row[i][nums]) return false;//有数为真,return false,下面同理
            if(columns[j][nums]) return false;
            if(box[3*(i/3)+j/3][nums]) return false;
            row[i][nums]=1;//上面都不符合,我们就得装值了,下面同理
            columns[j][nums]=1;
            box[3*(i/3)+j/3][nums]=1;
        }
    }
    return true;
}

4.最终结果

5.总结 

对我来说难度不算小,希望借这次总结,能把这种题型搞好

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值