难度:1
个人总结:傻傻地写错两个符号,1Y失败
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.
由于输入一定是9*9的数组,所以也没有什么要注意的地方class Solution { public: bool row(vector<char> &r) { int opt=0; for(int i=0;i<r.size();i++) { if(r[i] == '.') continue; if(opt&(1<<(r[i]-'0'-1))) return false; opt+=(1<<(r[i]-'0'-1)); } return true; } bool col_check(vector<vector<char> > &board, int col) { int opt=0; for(int i=0;i<board.size();i++) { if(board[i][col] == '.') continue; if(opt&(1<<(board[i][col]-'0'-1))) return false; opt+=(1<<(board[i][col]-'0'-1)); } return true; } bool center_check(vector<vector<char> > &board, int x, int y) { int dir[8][2]={{1,0},{1,-1},{1,1},{-1,-1},{-1,1},{-1,0},{0,1},{0,-1}}; int opt=0; opt+=(1<<(board[x][y]-'0'-1)); for(int i=0;i<8;i++) { if(board[x+dir[i][0]][y+dir[i][1]] == '.') continue; if(opt&(1<<(board[x+dir[i][0]][y+dir[i][1]]-'0'-1))) return false; opt+=(1<<(board[x+dir[i][0]][y+dir[i][1]]-'0'-1)); } return true; } bool isValidSudoku(vector<vector<char> > &board) { for(int i=0;i<board.size();i++) { if(!row(board[i])) return false; } if(board.size()>0&&board[0].size()>0) { for(int i=0;i<board[0].size();i++) { if(!col_check(board,i)) return false; } } int center[9][2]={{1, 1}, {1, 4}, {1, 7}, {4, 1}, {4, 4}, {4, 7}, {7, 1}, {7, 4}, {7, 7} }; for(int i=0;i<9;i++) { if(!center_check(board,center[i][0],center[i][1])) return false; } return true; } };