zoukankan      html  css  js  c++  java
  • 36. Valid Sudoku

    =============

    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.

    ====

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

    ----------------

    一个合法的数独应该符合三条规则

    1,每一行必须有数字1-9出现,而且必须出现一次

    2,每一列必须有数字1-9出现,而且必须出现一次

    3,面板中每9个连续的子面板,必须由数字1-9出现,而且必须出现一次

    规则连接:http://sudoku.com.au/TheRules.aspx

    思路:

    先按照行检查,再按照列检查,最后对子面板检查

    检查的过程是使用hash_table形式的数组实现的.

    ==================

    code:

    class Solution {
        /*一个合法的数独应该符合三条规则
         * 1,每一行必须有数字1-9出现,而且必须出现一次
         * 2,每一列必须有数字1-9出现,而且必须出现一次
         * 3,面板中每9个连续的子面板,必须由数字1-9出现,而且必须出现一次
         * 规则连接:http://sudoku.com.au/TheRules.aspx
         *
         *
         * 实现方法:
         * 先按照行检查,在按照列检查,最后对子面板检查
         * 检查的过程是使用hash_table形式的数组实现的
         *
         * */
    public:
        bool isValidSudoku(vector<vector<char>>& board) {
            bool used[9];
            for(int i = 0;i<9;i++){
                fill(used,used+9,false);
    
                for(int j = 0;j<9;j++){//check 行
                    if(!check(board[i][j],used))
                        return false;
                }
    
                fill(used,used+9,false);
                for(int j = 0;j<9;j++){//check 列
                    if(!check(board[j][i],used))
                        return false;
                }
            }
    
            for(int r = 0;r<3;r++){
                for(int c = 0;c<3;c++){
                    fill(used,used+9,false);
    
                    for(int i = r*3;i<r*3+3;i++){
                        for(int j = c*3;j<c*3+3;j++){
                            if(!check(board[i][j],used))
                                return false;
                        }
                    }
                }
            }//for-for
        }//isValidSudoku
    private:
        bool check(char ch,bool used[9]){
            if(ch == '.') return true;
            if(used[ch - '1']) return false;/*
                                            char型字节码可以充当数组下表,
                                            利用char类型的字面值就可以索引char字面值<key>对应的数组值<value>
                                            这是数据结构hash_table的体现:  key->value
                                            */
            return used[ch-'1'] = true;
        }
    };
  • 相关阅读:
    经典游戏--24点--c++代码实现和总体思路(简单暴力向)
    这么多TiDB负载均衡方案总有一款适合你
    思杰( Citrix)证书的正确处置方式
    从本质彻底精通Git——4个模型1个周期1个史观1个工作流
    HttpClient客户端网络编程——高可用、高并发
    Netty之数据编码
    维吉尼亚密码加解密原理及其实现
    无网环境安装docker之--rpm
    centos7无网环境安装docker
    CentOS8.3最小化安装后安装GNome桌面
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5621797.html
Copyright © 2011-2022 走看看