LeetCode: Valid Sudoku

本文介绍了一种使用C++编程语言实现的数独验证算法,通过遍历数独矩阵的每一行、每一列和每个宫格,确保不出现重复数字。详细解释了算法的实现逻辑,包括使用二维循环进行元素检查,并利用哈希表记录每个数字的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:3种情况,

1)每一行中,1-9个数字不能出现相同的数字,二重循环判断;

2)每一列同1)的原理一样

3)每9个格子不能出现相同的数字,事先确定好每一个格子的行列范围(可以采用左上角和右下角的行列作为标识)

code:

class Solution {
public:
    bool isValidSudoku(vector<vector<char> > &board) {
       int gridIndex[9][4] = {{0,0,2,2},{0,3,2,5},{0,6,2,8},
                                {3,0,5,2},{3,3,5,5},{3,6,5,8},
                                {6,0,8,2},{6,3,8,5},{6,6,8,8} };//格子位置
       bool hashTable[10] = {0};
       for(int i=0;i<9;i++){
           for(int k=0;k<10;k++) hashTable[k] = false;
           for(int j=0;j<9;j++){
               if(board[i][j] == '.')continue;
               if(hashTable[board[i][j]-'0']) return false;
               else
                 hashTable[board[i][j]-'0'] = true;
           }
       }
       
       for(int j=0;j<9;j++){
           for(int k=0;k<10;k++) hashTable[k] = false;
           for(int i=0;i<9;i++){
               if(board[i][j] == '.')continue;
               if(hashTable[board[i][j]-'0']) return false;
               else
                 hashTable[board[i][j]-'0'] = true;
           }
       }
        
        
        for(int grid = 0;grid<9;grid++){
            for(int k=0;k<10;k++) hashTable[k] = false;
            for(int i=gridIndex[grid][0];i<=gridIndex[grid][2];i++)
                for(int j=gridIndex[grid][1];j<=gridIndex[grid][3];j++){
                    if(board[i][j] == '.')continue;
                    if(hashTable[board[i][j]-'0']) return false;
                    else
                        hashTable[board[i][j]-'0'] = true;
                }
        }
        return true;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值