LeetCode(36) Valid Sudoku

来源:互联网 发布:梦想世界善恶知在哪看 编辑:程序博客网 时间:2024/04/27 21:15

题目如下:

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.

分析如下:


我的代码:

class Solution { private:    bool detectRepetition(vector<char> &part) {        std::set<char> part_set;        for (int i = 0; i < part.size(); ++i) {            if (part[i] == '.')                continue;            if (part[i] - '0' > 9 || part[i] - '0' < 0 )                return false;            if (part_set.find(part[i]) == part_set.end()) //一开始错写为了part_set::end();                part_set.insert(part[i]);            else                return false;        }        return true;    } public:    bool isValidSudoku(vector<vector<char> > &board) {        int rows = board.size();        if (rows == 0)            return true;        int cols = board[0].size();        //每次处理一行        for (int i = 0; i < rows; ++i) {            if ( !detectRepetition(board[i]))                return false;        }        vector<char> tmp_vec;        //每次处理一列        for (int j = 0; j < cols; ++j) {            for (int i = 0; i < rows; ++i) {                tmp_vec.push_back(board[i][j]);            }            if ( !detectRepetition(tmp_vec))                return false;            tmp_vec.clear();        }        //每次处理一个3*3正方形        for (int i = 0; i < rows; i += 3) { //NOTE: 注意i,j的变化逻辑,i, j步长为3            for (int j = 0; j < cols; j += 3) {                tmp_vec.insert(tmp_vec.end(), board[i].begin() + j, board[i].begin() + j+3);//以下每次处理3行                tmp_vec.insert(tmp_vec.end(), board[i+1].begin() + j, board[i+1].begin() + j+3);                tmp_vec.insert(tmp_vec.end(), board[i+2].begin() + j, board[i+2].begin() + j+3);                if ( !detectRepetition(tmp_vec))                    return false;                tmp_vec.clear();            }        }        return true;    }};



0 0
原创粉丝点击