Leetcode-36: Valid Sudoku
2018-03-22 16:19
387 查看
这题其实比较简单,我想复杂了,后来参考了网上的答案。
最简单的就是用位运算,因为只有行数,列数和小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
最简单的就是用位运算,因为只有行数,列数和小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 36 Valid Sudoku
- LeetCode 36 : Valid Sudoku (Java)
- 【LeetCode从零单排】No36 Valid Sudoku
- LeetCode: 36. Valid Sudoku
- [Leetcode] 36. Valid Sudoku
- LeetCode 36 Valid Sudoku
- LeetCode - 36 - Valid Sudoku
- 36.[Leetcode]Valid Sudoku
- leetCode 36. Valid Sudoku(数独) 哈希
- LeetCode解题笔记36 Valid Sudoku
- LeetCode 36. Valid Sudoku
- [leetcode] 36. Valid Sudoku
- 【LeetCode】C# 36、Valid Sudoku
- LeetCode 36. Valid Sudoku(数独Ⅰ)
- leetcode 36. Valid Sudoku
- LeetCode36-Valid Sudoku
- LeetCode----36. Valid Sudoku(有效数读)
- [leetcode 36] Valid Sudoku
- 【LeetCode】36 - Valid Sudoku
- LeetCode 36 Valid Sudoku(合法的数独)