LeetCode(36) Valid Sudoku
来源:互联网 发布:梦想世界善恶知在哪看 编辑:程序博客网 时间:2024/04/27 21:15
题目如下:
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.
分析如下:
我的代码:
class Solution { private: bool detectRepetition(vector<char> &part) { std::set<char> part_set; for (int i = 0; i < part.size(); ++i) { if (part[i] == '.') continue; if (part[i] - '0' > 9 || part[i] - '0' < 0 ) return false; if (part_set.find(part[i]) == part_set.end()) //一开始错写为了part_set::end(); part_set.insert(part[i]); else return false; } return true; } public: bool isValidSudoku(vector<vector<char> > &board) { int rows = board.size(); if (rows == 0) return true; int cols = board[0].size(); //每次处理一行 for (int i = 0; i < rows; ++i) { if ( !detectRepetition(board[i])) return false; } vector<char> tmp_vec; //每次处理一列 for (int j = 0; j < cols; ++j) { for (int i = 0; i < rows; ++i) { tmp_vec.push_back(board[i][j]); } if ( !detectRepetition(tmp_vec)) return false; tmp_vec.clear(); } //每次处理一个3*3正方形 for (int i = 0; i < rows; i += 3) { //NOTE: 注意i,j的变化逻辑,i, j步长为3 for (int j = 0; j < cols; j += 3) { tmp_vec.insert(tmp_vec.end(), board[i].begin() + j, board[i].begin() + j+3);//以下每次处理3行 tmp_vec.insert(tmp_vec.end(), board[i+1].begin() + j, board[i+1].begin() + j+3); tmp_vec.insert(tmp_vec.end(), board[i+2].begin() + j, board[i+2].begin() + j+3); if ( !detectRepetition(tmp_vec)) return false; tmp_vec.clear(); } } return true; }};
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
- ddpush 学习之路 13 Receiver.java
- 应用间通信
- 第2章第6题
- Tests of the Equality of Two Means
- 语音识别
- LeetCode(36) Valid Sudoku
- 多媒体
- ASP.NET MVC 接收Android上传的图片
- 地理位置
- Vb.net在窗体上而非textbox控件上捕捉键盘上按下的键
- 应用实战:Bing在线壁纸
- C#开发微信公众平台-就这么简单(附Demo)
- 应用实战:记账本
- myeclipse2013利用SDK自带eclipse搭建Android环境