首页 > 代码库 > [LeetCode] Valid Sudoku
[LeetCode] 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 ‘.‘
.
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.
方法:不必把空格都填好,只需检测给出的已经填好的数是否在行中、列中、小区域中重复,so easy,并不是检测它是否能填满哦
方法1:
class Solution {public: bool isValidSudoku(vector<vector<char> > &board) { // Note: The Solution object is instantiated only once. vector<int> row(9,0); vector<int> col(9,0); vector<int> tmp(9,0); for(int i = 0; i < 9; i++) { row = tmp; col = tmp; for(int j = 0; j < 9; j++) { if(board[i][j] != ‘.‘) { if(row[board[i][j]-‘1‘] > 0)return false; else row[board[i][j]-‘1‘]++; } if(board[j][i] != ‘.‘) { if(col[board[j][i]-‘1‘] > 0)return false; else col[board[j][i]-‘1‘]++; } } } for(int i = 0; i < 9; i+=3) for(int j = 0; j < 9; j+=3) { row = tmp; for(int a = 0; a < 3; a++) for(int b= 0; b < 3; b++) if(board[i+a][j+b] != ‘.‘) { if(row[board[i+a][j+b]-‘1‘]>0)return false; else row[board[i+a][j+b]-‘1‘]++; } } return true; } };
方法2:
class Solution {public: bool isValidSudoku(vector<vector<char> > &board) { // Start typing your C/C++ solution below // DO NOT write int main() function if(board.size()<9 || board[0].size()<9) return false; vector<bool> tmp(9,false); vector<vector<bool> > r(9,tmp); vector<vector<bool> > c(r); vector<vector<bool> > b(r); for(int i=0; i<9; i++) for(int j=0; j<9; j++) { if(board[i][j]==‘.‘) continue; int a = (i/3)*3 + j/3; int number = board[i][j]-‘1‘; if(r[i][number] || c[j][number] || b[a][number]) return false; r[i][number] = c[j][number] = b[a][number] = 1; } return true; }};
方法3:
class Solution {public: bool isValidSudoku(vector<vector<char> > &board) { int row,row2; int col,col2; int sqr,sqr2; int a,b,c; for(int i=0;i<9;i++){ row=0;row2 = 0; col=0;col2 = 0; sqr = 0;sqr2 =0; for(int j=0;j<9;j++){ a = board[i][j] - ‘0‘; b = board[j][i] - ‘0‘; c = board[3*(i%3)+j/3][3*(i/3)+j%3] - ‘0‘; if(a>0) row2 ^= 1<< a; if(b>0) col2 ^= 1<< b; if(c>0) sqr2 ^= 1<< c; if(row2 < row || col2<col || sqr2<sqr) return false; row = row2; col = col2; sqr = sqr2; } } return true; }};
[LeetCode] Valid Sudoku
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。