zoukankan      html  css  js  c++  java
  • 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/
  • 相关阅读:
    css浮动
    css各种元素最原始的表现
    css3 unset属性
    js类式继承
    javascript编写Tab选项卡
    javaScript事件冒泡
    javascript中的&&与||的用法
    比较好的前端网站
    原生js开发tab选项卡之闭包
    冒泡排序(中级版)
  • 原文地址:https://www.cnblogs.com/zmmm/p/13639910.html
Copyright © 2011-2022 走看看