• 62有效的数独(36)


    作者: Turbo时间限制: 1S章节: 哈希表

    晚于: 2020-08-19 12:00:00后提交分数乘系数50%

    截止日期: 2020-08-26 12:00:00

    问题描述 :

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

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

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

    数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

    上图是一个部分填充的有效的数独。

    数独部分空格内已填入了数字,空白格用 '.' 表示。

    示例 1:

    输入:

    53..7....

    6..195...

    .98....6.

    8...6...3

    4..8.3..1

    7...2...6

    .6....28.

    ...419..5

    ....8..79

    输出: true

    示例 2:

    输入:

    83..7....

    6..195...

    .98....6.

    8...6...3

    4..8.3..1

    7...2...6

    .6....28.

    ...419..5

    ....8..79

    输出: false

    解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。

         但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。

    说明:

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

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

    给定数独序列只包含数字 1-9 和字符 '.' 。

    给定数独永远是 9x9 形式的。

    可使用以下main函数:

    int main()

    {

        vector<vector<char> > board;

        char ch;

        for(int i=0; i<9; i++)

        {

            vector<char> aLine;

            for(int j=0; j<9; j++)

            {

                cin>>ch;

                aLine.push_back(ch);

            }

            board.push_back(aLine);

        }

        bool res=Solution().isValidSudoku(board);

        cout<<(res?"true":"false")<<endl;

        return 0;

    }

    输入说明 :

    输入9行,每行9个字符,只包含数字 1-9 和字符 '.'

    输出说明 :

    输出true或false

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <vector>
    using namespace std;
    
    class Solution {
    public:
        bool isValidSudoku(vector<vector<char>>& board) 
        {
            bool row[9][10]={0};
            bool col[9][10]={0};
            bool block[9][10]={0};
            
            for(int i=0;i<9;i++)
            {
                for(int j=0;j<9;j++)
                {
                    if(board[i][j]!='.')
                    {
                        int t=board[i][j]-'0';
                        if(row[i][t])//判断行有没有重复的元素 
                            return false;
                        else
                            row[i][t]=true;
                        if(col[j][t]) 
                            return false;
                        else
                            col[j][t]=true;
                        int b=(i/3)*3+(j/3);
                        if(block[b][t])
                            return false;
                        else
                            block[b][t]=true;
                    }
                }
            }
            return true;
        }
    };
    
    
    int main()
    {
        vector<vector<char> > board;
        char ch;
        for(int i=0; i<9; i++)
        {
            vector<char> aLine;
            for(int j=0; j<9; j++)
            {
                cin>>ch;
                aLine.push_back(ch);
            }
            board.push_back(aLine);
        }
        bool res=Solution().isValidSudoku(board);
        cout<<(res?"true":"false")<<endl;
        return 0;
    }
    //https://leetcode-cn.com/problems/valid-sudoku/solution/36-jiu-an-zhao-cong-zuo-wang-you-cong-shang-wang-x/
  • 相关阅读:
    bzoj 1030 [JSOI2007]文本生成器
    Swift 学习笔记 (闭包)
    Swift 学习笔记 (函数)
    HTML 学习笔记 JQueryUI(Interactions,Widgets)
    HTML 学习笔记 JQuery(表单,表格 操作)
    HTML 学习笔记 JQuery(animation)
    HTML 学习笔记 JQuery(盒子操作)
    HTML 学习笔记 JQuery(事件)
    HTML 学习笔记 JQuery(DOM 操作3)
    HTML 学习笔记 JQuery(DOM 操作2)
  • 原文地址:https://www.cnblogs.com/zmmm/p/13639910.html
Copyright © 2020-2023  润新知