LeetCode——036

本文详细阐述了如何通过编程逻辑验证数独盘面的有效性,包括同行、同列及3*3方阵内数字不重复的规则。通过使用三个二维数组进行标记,实现对数独盘面的快速有效验证。

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

这里写图片描述
/*

  1. Valid Sudoku My Submissions QuestionEditorial Solution
    Total Accepted: 71051 Total Submissions: 233215 Difficulty: Easy
    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’.

A partially filled sudoku which is valid.

Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

Subscribe to see which companies asked this question
*/
/*
解题思路:
数独:同行同列都不能有重复数字,在3*3的方阵中也不能有重复数字,只要这三条都满足则这个数独状态就是正确的。
用三个二维数组分别来标记着三个条件。行和列都好说,就是小方阵那个条件稍微有点难度cellNum[i][j] ,i代表是第几个小方块,j代表是数字。初始化状态都为0,若是下次这个数字再重复出现则返回false。

*/

class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {

        //判断给出的数独盘面是否合理

        int row=board.size(),col=board[0].size();
        vector<vector<int>> rowNum(row,vector<int>(col,0));
        vector<vector<int>> colNum(col,vector<int>(row,0));
        vector<vector<int>> cellNum(row,vector<int>(col,0));

        //遍历并判断
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){

                if(board[i][j]=='.')continue;
                int index=board[i][j]-'1';
                if(rowNum[i][index]==1 || colNum[j][index]==1 || cellNum[i/3*3+j/3][index]==1)return false;

                rowNum[i][index]=1;
                colNum[j][index]=1;
                cellNum[i/3*3+j/3][index]=1;

            }
        }

        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值