地址:http://oj.leetcode.com/problems/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 '.'.
Note:A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
csdn是不是老抽风啊,一点都不稳定,博客昨晚上都写好了,一直发不了,编辑也丢失了。有几次进博客的页面都是另外一个,难道是灰度上线?
思路:刚开始没看清楚题意。这题只要验证给出数字是否合理就行,关于某个给出的数字是否是合理的,从下面三个方面来判断:
1. 所在行是否有重复数字
2.所在列是否有重复数字
3.所在9字宫格是否有重复数字
以上三条都满足说明该数数字在该位置是合理的。
参考代码:
class Solution {
public:
bool is_fill(vector<vector<char>>&board, int row, int col, char ch)
{
for(int i = 0; i<9; ++i)
{
if((i!=row && board[i][col]==ch)||(i!=col && board[row][i]==ch))
return false;
}
int left_row, left_col, right_row, right_col;
if(row % 3 ==2)
{
left_row = row-2;
right_row = row;
}
else if(row % 3 ==1)
{
left_row = row-1;
right_row = row+1;
}
else
{
left_row = row;
right_row = row+2;
}
if(col % 3 ==2)
{
right_col = col;
left_col = col-2;
}
else if(col % 3 ==1)
{
left_col = col-1;
right_col = col+1;
}
else
{
left_col = col;
right_col = col + 2;
}
for(int i = left_row; i<=right_row; ++i)
for(int j = left_col; j<=right_col; ++j)
if(i!=row && j!=col && board[i][j]==ch)
return false;
return true;
}
bool isValidSudoku(vector<vector<char> > &board) {
if(board.empty() || board.size()!=9)
return false;
for(int i = 0; i<board.size(); ++i)
{
for(int j = 0; j<board[i].size(); ++j)
{
if(board[i][j]!='.' && !is_fill(board, i, j, board[i][j]))
{
return false;
}
}
}
return true;
}
};