题目:
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.
For this problem, just according to the define of Sudoku,
-
row: in the row, there can't have same number.
-
column: in the column, there can't have same number.
-
3 * 3 grid: in the 3 * 3 grid, there can't have same number.
class Solution {
public:
bool isvalid(vector<vector<char>>& board,int row, int cow){
for(int i=0;i<9;i++){
if(i!=cow && board[row][cow]==board[row][i]) //check row
return false;
if(i!=row && board[row][cow]==board[i][cow]) //check cow
return false;
}
for(int j=row/3*3;j<row/3*3+3;j++) //check board
for(int k=cow/3*3;k<cow/3*3+3;k++)
if(j!=row && k!=cow && board[row][cow]==board[j][k])
return false;
return true;
}
bool isValidSudoku(vector<vector<char>>& board) {
for(int row=0;row<9;row++)
for(int cow=0;cow<9;cow++){
if(board[row][cow]=='.')continue;
if(!isvalid(board,row,cow))return false;
}
return true;
}
};
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
def isvalid(board,row,cow):
for i in range(9):
if i!=cow and board[row][i]==board[row][cow]:
return False
if i!=row and board[i][cow]==board[row][cow]:
return False
for j in range(row/3*3, row/3*3+3):
for k in range(cow/3*3,cow/3*3+3):
if j!=row and k!=cow and board[row][cow]==board[j][k]:
return False
return True
for row in range(9):
for cow in range(9):
if board[row][cow]=='.':
continue
if(isvalid(board,row,cow)==False):
return False
return True