力扣原题《有效的数独游戏》,纯手搓,已验证

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

数字 1-9 在每一行只能出现一次。

数字 1-9 在每一列只能出现一次。

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

注意:

一个有效的数独(部分已被填充)不一定是可解的。

只需要根据以上规则,验证已经填入的数字是否有效即可。

空白格用 '.' 表示。
示例 1:

输入:board =

\["5","3",".",".","7",".",".",".","."

,"6",".",".","1","9","5",".",".","."

,".","9","8",".",".",".",".","6","."

,"8",".",".",".","6",".",".",".","3"

,"4",".",".","8",".","3",".",".","1"

,"7",".",".",".","2",".",".",".","6"

,".","6",".",".",".",".","2","8","."

,".",".",".","4","1","9",".",".","5"

,".",".",".",".","8",".",".","7","9"]

输出:true
示例 2:

输入:board =

\["8","3",".",".","7",".",".",".","."

,"6",".",".","1","9","5",".",".","."

,".","9","8",".",".",".",".","6","."

,"8",".",".",".","6",".",".",".","3"

,"4",".",".","8",".","3",".",".","1"

,"7",".",".",".","2",".",".",".","6"

,".","6",".",".",".",".","2","8","."

,".",".",".","4","1","9",".",".","5"

,".",".",".",".","8",".",".","7","9"]

输出:false

解释:除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。 但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
提示:

board.length == 9

boardi.length == 9

boardij 是一位数字(1-9)或者 '.'

我的答案

cpp 复制代码
class  ValidSuduku {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        //本元素在3x3、行或列中是否出现过
        bool isValid = true;
        for (int i = 0; i < board.size(); i++)
        {
            for (int j = 0; j < board.size(); j++)//这个for如何省掉
            {
                char own = board[i][j];
                if (own != '.') 
                {
                     int x = i / 3, y = j / 3;
					 for (int p = 0; p < 3; p++)
					 {
					     for (int q = 0; q < 3; q++) 
					     {
					         if ((x * 3 + p != i && y * 3 + q != j)&&(own == board[x * 3 + p][y * 3 + q]))//先看3x3
					         {
					              isValid = false;
					              break;
					         }
					         int m = p*3 + q;
					         if ((m != i && own == board[m][j]) || (m != j && own == board[i][m]))//再看0-8的行列
					         {
					             isValid = false;
					             break;
					         }
					     }
					 }  
                }
                if (!isValid)
                    break;
            }
            if (!isValid)
                break;
        }
        return isValid;
    }
};

int main()
{
    vector<vector<vector<char>>> boards;
    char arrayBoards1[][9] = {
        { '5', '3', '.', '.', '7', '.', '.', '.', '.' },
        { '6','.','.','1','9','5','.','.','.' },
        { '.','9','8','.','.','.','.','6','.' },
        { '8','.','.','.','6','.','.','.','3' },
        { '4','.','.','8','.','3','.','.','1' },
        { '7','.','.','.','2','.','.','.','6' },
        { '.','6','.','.','.','.','2','8','.' },
        { '.','.','.','4','1','9','.','.','5' },
        { '.','.','.','.','8','.','.','7','9' }
    };
    char arrayBoards2[][9] = {
       { '8', '3', '.', '.', '7', '.', '.', '.', '.' },
       { '6','.','.','1','9','5','.','.','.' },
       { '.','9','8','.','.','.','.','6','.' },
       { '8','.','.','.','6','.','.','.','3' },
       { '4','.','.','8','.','3','.','.','1' },
       { '7','.','.','.','2','.','.','.','6' },
       { '.','6','.','.','.','.','2','8','.' },
       { '.','.','.','4','1','9','.','.','5' },
       { '.','.','.','.','8','.','.','7','9' }
    };
    vector<vector<char>> boards1(9,vector<char>(9));
    vector<vector<char>> boards2(9, vector<char>(9));
    for (int i = 0; i < 9; i++)
    {//此处耗时
        memcpy(&boards1[i][0], &arrayBoards1[i][0], 9 * sizeof(char));
    }
    for (int i = 0; i < 9; i++)
    {//此处耗时
        memcpy(&boards2[i][0], &arrayBoards2[i][0], 9 * sizeof(char));
    }
    boards.push_back(boards1);
    boards.push_back(boards2);
    ValidSuduku validSuduku;
    for (int i = 0; i < boards.size(); i++)
    {
        std::cout << "已填入的数字是否有效:" << (validSuduku.isValidSudoku(boards[i])==0?"False" :"True") << std::endl;
    }
    boards1.clear();
    boards1.shrink_to_fit();
    boards2.clear();
    boards2.shrink_to_fit();
    boards.clear();
    boards.shrink_to_fit();
}
相关推荐
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队1 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC2 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
金銀銅鐵3 天前
[Python] 模 n 乘法的逆元计算器
python·数学·游戏
_清歌3 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局3 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法
躬行见万象3 天前
《VLA 系列》UniLab 强化训练 | G1 机器人 |复现
算法