LeetCode(36)-Valid Sudoku
来源:互联网 发布:c语言vector用法 编辑:程序博客网 时间:2024/05/20 01:09
问题描述:
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.
问题分析:
判断数独是否有效,不要求求解。
创建一个二维数组存储,只要同一行、列和块没有元素没有相同的元素即可。
问题求解:
bool isValidSudoku(vector<vector<char>>& board) { vector<short> col(9, 0); vector<short> block(9, 0); vector<short> row(9, 0); for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) { if (board[i][j] != '.') { int idx = 1 << (board[i][j] - '0'); if (row[i] & idx || col[j] & idx || block[i/3 * 3 + j / 3] & idx) return false; row[i] |= idx; col[j] |= idx; block[i/3 * 3 + j/3] |= idx; } } return true; }
第二遍:
class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { vector<unordered_set<char>> rows(9), cols(9), grid(9); for (int i = 0; i < 9; i++){ for (int j = 0; j < 9; j++) { if (board[i][j] != '.') { if(rows[i].find(board[i][j]) != rows[i].end()) { return false; }else{ rows[i].insert(board[i][j]); } if(cols[j].find(board[i][j]) != rows[j].end()) { return false; }else{ cols[j].insert(board[i][j]); } int n = i-i%3+j/3; if(grid[n].find(board[i][j]) != grid[n].end()) { return false; }else{ grid[n].insert(board[i][j]); } } } } return true; }};这次用hash set求解,关键是行列和网格要选合适的数据结构表示,还有n= i-i%3+j/3。从该题了解了我对STL掌握不是很好,接下来要好好总结。
0 0
- [leetcode 36] Valid Sudoku
- leetcode 36: Valid Sudoku
- LeetCode(36) Valid Sudoku
- leetcode-36 Valid Sudoku
- Valid Sudoku - LeetCode 36
- LeetCode 36 Valid Sudoku
- LeetCode---(36) Valid Sudoku
- Leetcode 36 Valid Sudoku
- Leetcode[36]-Valid Sudoku
- leetcode 36: Valid Sudoku
- Leetcode# 36 Valid Sudoku
- Leetcode#36||Valid Sudoku
- leetcode-36 Valid Sudoku
- leetcode 36:Valid Sudoku
- LeetCode 36: Valid Sudoku
- [leetcode 36] Valid Sudoku
- 【LEETCODE】36-Valid Sudoku
- Leetcode 36 - Valid Sudoku
- 《笨办法学Python》 第26课手记
- 算法导论15.1钢条切割 练习总结
- hook模板x86/x64通用版(3)--CHook.h说明
- 多线程浅析(2)
- Git配置
- LeetCode(36)-Valid Sudoku
- (私人简单记录)使用xib文件
- ServletConfig对象
- Javascript 如何修改CSS样式(网页样式) 补充说明
- 关于memcached
- VC6.0中如何修改工程的名字
- 跟我学习dubbo-消息中间件在分布式系统中的作用介绍(8)
- 1029. 旧键盘(20)
- JavaSE020_反射应用之工厂模式