leetcide Valid Sudoku

本文详细阐述了如何通过编程逻辑来验证数独的正确性,包括遍历整个数独矩阵,进行行、列、小区域的数值检查,确保每个单元格内及相应的行列小区域内不重复数字。

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

题目:https://oj.leetcode.com/problems/valid-sudoku/

题意:判断一个数独是否是正确的,这也是后面解数独题的一个部分,如果是格子里是“.”直接跳到下一次循环

思路:3个判断+1个大的二维数组循环

将整个二维数组循环一遍,每一个格子做三个判断,行,列,小格子

用三个二维数组去记录这三个判断的结果,比如bool row[9][9];这个记录行的,比如row[1][5],代表第一行里有没有5这个数,有true,没有false,以此类推另外两个记录数组,col和sub

注意判断小格子时,看这个数属于第几小格子是要试一下的。。。。


class Solution {
public:
    bool isValidSudoku(vector<vector<char> > &board) {
        bool rows[9][9];<span style="white-space:pre">	</span>//记录行里每个元素出现过的情况 下面类似
        bool cols[9][9];
        bool sub[9][9];
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                rows[i][j]=false;
                cols[i][j]=false;
                sub[i][j]=false;
            }
        }
        for(int i = 0;i<9;i++){
            for(int j = 0;j<9;j++){
                int one = board[i][j] - '1';
                if (board[i][j] == '.') continue;
                if(rows[i][one]||cols[j][one]||sub[i/3*3 + j/3][one])
                    return false;
                else rows[i][one]=cols[j][one]=sub[i/3*3 + j/3][one]=true;<span style="white-space:pre">	</span>//注意判断小格子的方法
            }
        }
        return true;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值