码迷,mamicode.com
首页 > 其他好文 > 详细

【Leetcode】036. Valid Sudoku

时间:2017-09-06 21:20:53      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:logs   nbsp   pre   rac   oar   .com   term   led   sed   

题目:

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;
    }
};

 

【Leetcode】036. Valid Sudoku

标签:logs   nbsp   pre   rac   oar   .com   term   led   sed   

原文地址:http://www.cnblogs.com/Atanisi/p/7486846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!