zoukankan      html  css  js  c++  java
  • 【LeetCode】036. 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.

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

    题解:

    Solution 1 

    class Solution {
    public:
        bool isValidSudoku(vector<vector<char>>& board) {
            const int n = 9;
            
            for(int i = 0; i < n; ++i){
                bool used[n] = {false};
                for(int j = 0; j < n; ++j){
                    if(isused(board[i][j], used))
                        return false;
                }
            }
            for(int i = 0; i < n; ++i){
                bool used[n] = {false};
                for(int j = 0; j < n; ++j){
                    if(isused(board[j][i], used))
                        return false;
                }
            }
            for(int r = 0; r < 3; ++r){
                for(int c = 0; c < 3; ++c){
                    bool used[n] = {false};
                    for(int i = r * 3; i < r * 3 + 3; ++i){
                        for(int j = c * 3; j < c * 3 + 3; ++j){
                            if(isused(board[i][j], used))
                               return false;
                        }
                    }
                }
            }
            return true;
        }
        bool isused(char val, bool used[9]){
            if(val == '.') 
                return false;
            if(used[val - '1'])
                return true;
            used[val - '1'] = true;
            return false;
        }
    };    

    Solution 2 

    class Solution {
    public:
        bool isValidSudoku(vector<vector<char>>& board) {
            const int n = 9;
            vector<vector<bool>> rowboard(n, vector<bool>(n, false));
            vector<vector<bool>> colboard(n, vector<bool>(n, false));
            vector<vector<bool>> celboard(n, vector<bool>(n, false));
            for(int i = 0; i < n; ++i){
                for(int j = 0; j < n; ++j){
                    if(board[i][j] == '.') continue;
                    int ch = board[i][j] - '1';
                    if(rowboard[i][ch] || colboard[ch][j] || celboard[3 * (i / 3) + j / 3][ch])
                        return false;
                    rowboard[i][ch] = true;
                    colboard[ch][j] = true;
                    celboard[3 * (i / 3) + j / 3][ch] = true;
                }
            }
            return true;
        }
    };
  • 相关阅读:
    python爬虫之趟雷
    python附录-builtins.py模块str类源码(含str官方文档链接)
    python-基础学习篇(一)
    pycharm和webstorm永久激活方法
    计算机网络基础概述
    计算机基础
    B/S和C/S架构简单理解
    认识HTML中文本、图片、链接标签和路径
    结对开发
    全国疫情可视化地图 (一)
  • 原文地址:https://www.cnblogs.com/Atanisi/p/7486846.html
Copyright © 2011-2022 走看看