LeetCode刷题笔录Sudoku Solver
2014-08-05 08:21
281 查看
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character
You may assume that there will be only one unique solution.
A sudoku puzzle...
...and its solution numbers marked in red.
和N-Queens那题想法差不多,对于每个格子,从1到9都填进去一遍试一下,然后check是否和当前已有的元素冲突。如果不冲突,则递归进行下一个格子。可以按行前进一格也可以按列前进一格。注意尝试填进去的数字再递归出来之后要改回'.‘。
Empty cells are indicated by the character
'.'.
You may assume that there will be only one unique solution.
A sudoku puzzle...
...and its solution numbers marked in red.
和N-Queens那题想法差不多,对于每个格子,从1到9都填进去一遍试一下,然后check是否和当前已有的元素冲突。如果不冲突,则递归进行下一个格子。可以按行前进一格也可以按列前进一格。注意尝试填进去的数字再递归出来之后要改回'.‘。
public class Solution { public void solveSudoku(char[][] board) { solveSudoku(board, 0, 0); } public boolean solveSudoku(char[][] board, int row, int col){ if(col >= 9) return solveSudoku(board, row + 1, 0); if(row == 9) return true; if(board[row][col] == '.'){ for(char i = '1'; i <= '9'; i++){ board[row][col] = i; if(isValid(board, row, col, i)){ if(solveSudoku(board, row, col + 1)) return true; } board[row][col] = '.'; } } else{ return solveSudoku(board, row, col + 1); } return false; } public boolean isValid(char[][] board, int row, int col, char value){ //check if duplicate exists in the same row or column for(int i = 0; i < 9; i++){ if(i != col && value == board[row][i]) return false; if(i != row && value == board[i][col]) return false; } //check if duplicate exists in the same cube int cubeRowStart = row / 3 * 3; int cubeColStart = col / 3 * 3; for(int i = cubeRowStart; i < cubeRowStart + 3; i++){ for(int j = cubeColStart; j < cubeColStart + 3; j++){ if(i != row && value == board[i][j]) return false; if(j != col && value == board[i][j]) return false; } } return true; } }
相关文章推荐
- LeetCode刷题笔录Distinct Subsequences
- [Leetcode] Sudoku Solver
- [leetcode] Sudoku Solver
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
- LeetCode - Sudoku Solver
- LeetCode刷题笔录Unique Binary Search Trees
- 【LeetCode】Sudoku Solver
- LeetCode 37 Sudoku Solver
- [LeetCode]037-Sudoku Solver
- LEETCODE —— Sudoku Solver
- LeetCode-37-Sudoku Solver, list转字符串join,回溯
- LeetCode刷题笔录Sum Root to Leaf Numbers
- LeetCode刷题笔录Gray Code
- leetcode 37. Sudoku Solver
- leetcode第一刷_Sudoku Solver
- LeetCode刷题笔录 Two Sum
- LeetCode刷题笔录Path Sum II
- LeetCode刷题笔录Balanced Binary Tree
- LeetCode刷题笔录Simplify Path
- LeetCode 116 Sudoku Solver