Valid Sudoku - LeetCode 36

来源:互联网 发布:c语言如何输入多个数据 编辑:程序博客网 时间:2024/06/11 18:58

题目描述: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 '.'.

Valid Sudoku - min_cheng01 - min_cheng01的博客

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.

分析:此题是要判断一个数独是否是有效的。有效的条件是:

     1) 每一行1-9之间的数字最多只出现一次;

     2) 每一列1-9之间的数字最多只出现一次;

     3) 每一个九宫格中1-9之间的数字最多只出现一次,

题意很直白,只需要判断是否满足以上三个条件,若均满足,则视为valid。

以下是C++实现代码:

class Solution {public:    bool markUsed(vector<char> vec)   /* 判断是否只包含1-9,且每个数最多只出现一次,若是,则返回true */    {         int mark[10] = {0}; vector<char>::iterator itr; for(itr=vec.begin(); itr != vec.end();itr++) { if(*itr != '.') { if((*itr - '0' > 0 && *itr-'0' <10))++mark[*itr - '0']; } if(mark[*itr - '0'] > 1) return false; } return true;    }    bool isValidSudoku(vector<vector<char> > &board) { /* rows:判断每行是否只包含1-9之间的数最多一次 */vector<vector<char>>::iterator iter;for(iter = board.begin(); iter != board.end(); iter++){if( !markUsed(*iter))    /*每一行判断,若不满足条件,则立即退出,返回false */return false;} /*colum:判断每列是否只包含1-9之间的数最多一次 */for(int i = 0; i < 9;i++){        vector<char> tmpv;for(int j = 0;j < 9; j++){         tmpv.push_back(board[j][i]);}if(!markUsed(tmpv))   /*每一列判断,若不满足条件,则立即退出,返回false */return false;}/* each block:判断每个9宫格是否只包含1-9之间的数最多一次 */for(int k = 0; k < 3; k++)  /* 行号分成3块,每块大小为3 */{for(int h = 0; h < 3; h++)  /*列号分为3块,没块大小为3*/{vector<char> tmpv;for(int row = k * 3; row < k * 3 + 3; row++)   /*  行  */{for(int col = h * 3; col < h * 3 + 3; col++)   /*  列 */{tmpv.push_back(board[row][col]);}}if(!markUsed(tmpv))  /* 每一个九宫格判断,若不满足条件,则立即退出,返回false */return false;}}return true;    }};


0 0
原创粉丝点击