您的位置:首页 > 其它

Leetcode-36: Valid Sudoku

2018-03-22 16:19 381 查看
这题其实比较简单,我想复杂了,后来参考了网上的答案。
最简单的就是用位运算,因为只有行数,列数和小3*3的grid都是9,所以用int足够了。
注意board[i][j]会落在第(i/3*3+j/3)个grid。#include <iostream>
#include <vector>

using namespace std;

bool isValidSudoku(vector<vector<char>>& board) {

if (board.size()!=9) return false;

vector<int> row(9,0), col(9,0), grids(9,0);

for (int i=0; i<9; ++i) {
if (board[i].size()!=9) return false;
for (int j=0; j<9; ++j) {
char c=board[i][j];
if (c=='.') continue;
int num=0x1<<(board[i][j]-'0');
if ((row[i]&num) || (col[j]&num) || (grids[i/3*3+j/3]&num))
return false;
row[i]|=num; col[j]|=num; grids[i/3*3+j/3]|=num;
}
}

return true;
}

int main()
{
vector<vector<char> > board{ {'.','.','.','.','5','.','.','1','.'},
{'.','4','.','3','.','.','.','.','.'},
{'.','.','.','.','.','3','.','.','1'},
{'8','.','.','.','.','.','.','2','.'},
{'.','.','2','.','7','.','.','.','.'},
{'.','1','5','.','.','.','.','.','.'},
{'.','.','.','.','.','2','.','.','.'},
{'.','2','.','9','.','.','.','.','.'},
{'.','.','4','.','.','.','.','.','.'} };

cout<<isValidSudoku(board);

return 0;
}
sdaf
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Leetcode