LeetCode面试经典150题之有效的数独

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

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)

 

 简述:题目判断条件可以说给的非常清晰了,只需要判断那三个条件,别看判断数独是否可行看上去这么生僻,恐怕不给提示没有几个人能知道,所以只要直接遍历判断就好了,这里简单讲讲思路,注释会附在代码中,同时会对一些可能的疑问做解答。

class Solution {
public:
    bool isValidSudoku(std::vector<std::vector<char>>& board) 
    {
        int row[9][10] = { 0 };//共有9行,每行九个数字,row[x][0]闲置,存在的数字直接放在row[x][1-9]中
        int column[9][10] = { 0 };//9列,9数字
        int block[9][10] = { 0 };//9个方块,每方块9数字
        int UsingNumber;
        for (int Hang = 0; Hang < 9; Hang++)//行
        {
            for (int Lie = 0; Lie < 9; Lie++)//列
            {
                if (board[Hang][Lie] == '.')
                    continue;
                else
                    UsingNumber = (int)(board[Hang][Lie]-'0');//将字符转换为整形
                if (row[Hang][UsingNumber] == 1)//判断该行该列的数是否在该行出现过
                    return false;
                if (column[Lie][UsingNumber] == 1)//同理
                    return false;
                if (block[Lie / 3 + (Hang / 3) * 3][UsingNumber] == 1)//同理
                    return false;
                row[Hang][UsingNumber] = 1;//当这个数没有在上述重复情况出现,那将其记录到已出现中
                column[Lie][UsingNumber] = 1;
                block[Lie / 3 + (Hang / 3) * 3][UsingNumber] = 1;

            }
        }
        return true;
    }
};

例图中已经用加粗线条将所有的各自分成了9个格,分别是:

0        1        2

3        4        5

6        7        8

难点就是如何写判断在第X个格子的判断条件。

我们观察,当column=0-2时,我们都被归为0或3或6格中,也就是每行的第0个,当column=3-5时,都被归为1或4或7中,也就是每行的第1个方格中,当column=6-8时,都被归为2或5或8,也就是每行的第2个方格中。

所以不难推出其中需要一个column/3

当row=0-2,我们都被归为第一行中,row=3-5,我们都被归为第二行中,row=6-8,都被归为第三行,所以不难看出其需要一个(row/3)*3

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值