LEETCODE 37. Sudoku Solver
2017-06-04 23:02
323 查看
题目大意
是leetcode36的进阶版,要解出数独的答案解题思路
就是用递归,无奈太渣,弄错了边界条件,而且思路还不够清晰,递归函数返回类型一开始写成void了,导致board里面的内容总是被清空,后来改成bool,并在清空内容之前做一下判断。实现代码
class Solution { public: void solveSudoku(vector<vector<char>>& board) { bool rowFlag[9][9] = {false}, colFlag[9][9] = {false}, blockFlag[9][9] = {false}; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (board[i][j] != '.') { rowFlag[board[i][j] - '1'][i] = true; colFlag[board[i][j] - '1'][j] = true; blockFlag[board[i][j] - '1'][i / 3 * 3 + j / 3] = true; } } } recursion(board, rowFlag, colFlag, blockFlag, 0, 0); } private: bool recursion(vector<vector<char>>& board, bool rowFlag[9][9], bool colFlag[9][9], bool blockFlag[9][9], int row, int col) { if (row == 9 && col == 0) { return true; } if (board[row][col] != '.') { col++; if (col > 8) { col = 0; row++; } return recursion(board, rowFlag, colFlag, blockFlag, row, col); } else { for (int i = 1; i <= 9; i++) { if (!rowFlag[i - 1][row] && !colFlag[i - 1][col] && !blockFlag[i - 1][row / 3 * 3 + col / 3]) { rowFlag[i - 1][row] = true; colFlag[i - 1][col] = true; blockFlag[i - 1][row / 3 * 3 + col / 3] = true; board[row][col] = i + '0'; int newRow = row, newCol = col + 1; if (newCol > 8) { newCol = 0; newRow++; } bool flag = recursion(board, rowFlag, colFlag, blockFlag, newRow, newCol); if (!flag) { rowFlag[i - 1][row] = false; colFlag[i - 1][col] = false; blockFlag[i - 1][row / 3 * 3 + col / 3] = false; board[row][col] = '.'; } else { return true; } } } return false; } } };
相关文章推荐
- [TODO]LeetCode 37. Sudoku Solver
- [LeetCode]37. Sudoku Solver
- leetcode_37. Sudoku Solver ? 待解决
- 个人记录-LeetCode 37. Sudoku Solver
- (Java)LeetCode-37. Sudoku Solver
- 【LeetCode】37. Sudoku Solver
- [LeetCode] 37. Sudoku Solver
- leetcode-37. Sudoku Solver
- leetcode 37. Sudoku Solver
- [Leetcode] 37. Sudoku Solver 解题报告
- Leetcode 37. Sudoku Solver
- LeetCode 37. Sudoku Solver
- leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
- leetcode 37. Sudoku Solver
- (Leetcode)37. Sudoku Solver
- LeetCode笔记:37. Sudoku Solver
- [leetcode] 37. Sudoku Solver 解题报告
- LeetCode 37. Sudoku Solver--回溯法
- [LeetCode] 37. Sudoku Solver 求解数独
- leetcode题解-37. Sudoku Solver