您的位置:首页 > 编程语言 > C语言/C++

[leetcode]36. Valid Sudoku c语言

2016-04-03 12:04 323 查看
题目

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.

题意很简单,判断一个数独是否合法,而不是求解这个数独。那么只需要判断每行每列每个小九宫是否有重复的数字即可

#define boardToNum(x, y) (board[x][y] - '0')

bool isValidSudoku(char** board, int boardRowSize, int boardColSize) {
int conflict[9] = {0};
int i = 0, j = 0, k = 0;

/* 每行判断是否有冲突 */
for(i = 0; i < boardRowSize; i++)
{
memset(conflict, 0x0, sizeof(conflict));
for(j = 0; j < boardColSize; j++)
{
if(board[i][j] != '.')
{
if(1 == conflict[boardToNum(i,j) - 1])
return false;
else
conflict[boardToNum(i,j) - 1] = 1;
}
}
}

/* 每列判断是否有冲突 */
for(j = 0; j < boardColSize; j++)
{
memset(conflict, 0x0, sizeof(conflict));
for(i = 0; i < boardRowSize; i++)
{
if(board[i][j] != '.')
{
if(1 == conflict[boardToNum(i,j) - 1])
return false;
else
conflict[boardToNum(i,j) - 1] = 1;
}
}
}

/* 每个小九宫判断是否有冲突 */
for(k = 0 ; k < 9; k++)
{
memset(conflict, 0x0, sizeof(conflict));
for(i = k/3*3; i < k/3*3+3; i++)
{
for(j = k%3*3; j < k%3*3 + 3; j++)
{
if(board[i][j] != '.')
{
if(1 == conflict[boardToNum(i,j) - 1])
return false;
else
conflict[boardToNum(i,j) - 1] = 1;
}
}
}
}
return true;
}


runtime:4ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode c语言