LeetCode:Sudoku Solver Valid Sudouku
其實數獨還是我挺喜歡的一個游戲。原來有本數獨的書。
其實Sudoku是基于Valid Sudouku.其實一開始有點想太多。基于平常玩數獨的經驗,有很多解數獨的規則。貌似這個人為判斷因素比較多。
而且一開始理解的valid是有解無解,其實這里要求的是給定的board里的數字是否符合規則,不一定能解。
其實我這里有3個函數,一個是判斷行除該位置外是否有相同值的,一個是列,最后一個是小正方形里。
而求解使用的是暴力,一個個嘗試。
public class SudokuSolver {
???
??? public void solveSudoku(char[][] board)
??? {
??????? if(board == null) return;
??????? suduku(board);
??? }
???
??? public boolean suduku(char[][] board)
??? {
??????? for(int i = 0;i<9;i++)
??????? {
??????????? for(int j = 0;j<9;j++)
??????????? {
??????????????? if(board[i][j] == '.')
??????????????? {
??????????????????? for(int k = 1;k<=9;k++)
??????????????????? {
??????????????????????? board[i][j] =? (char)('0' + k);
??????????????????????? if(isValid(board,i,j)&&suduku(board))
??????????????????????? {
??????????????????????????? return true;
??????????????????????? }
??????????????????????? board[i][j] = '.';
??????????????????? }
??????????????????? return false;
??????????????? }
??????????? }
??????? }
??????? return true;
??? }
???
??? public boolean isValid(char[][] board,int row,int column)
??? {
??????? if(board == null)return false;
??????? boolean valid = true;
??????? if(rowContainsValue(board,row,column,board[row][column]))
??????? {
??????????? valid = false;
??????????? return valid;
??????? }
??????? if(columnContainsValue(board,row,column,board[row][column]))
??????? {
??????????? valid = false;
??????????? return valid;
??????? }
??????? if(squareContainsValue(board,row,column,board[row][column]))
??????? {
??????????? valid = false;
??????????? return valid;
??????? }
??????? return valid;
??? }
???
??? public boolean isValidSudoku(char[][] board) {
???????
??????? if(board == null) return false;
??????? boolean valid = true;
??????? boolean flag = true;
??????? for(int i = 0;i<9&&flag;i++)
??????? {
??????????? for(int j = 0;j<9;j++)
??????????? {
??????????????? if(board[i][j] == '.')
??????????????????? continue;
??????????????? if(rowContainsValue(board,i,j,board[i][j]))
??????????????? {
??????????????????? valid = false;
??????????????????? flag = false;
??????????????????? break;
??????????????? }
??????????????? if(columnContainsValue(board,i,j,board[i][j]))
??????????????? {
??????????????????? valid = false;
??????????????????? flag = false;
??????????????????? break;
??????????????? }
??????????????? if(squareContainsValue(board,i,j,board[i][j]))
??????????????? {
??????????????????? valid = false;
??????????????????? flag = false;
??????????????????? break;
??????????????? }
??????????? }
??????? }
???????
??????? return valid;
???????
??? }
???
??? public boolean rowContainsValue(char[][] board,int row,int column,char value)
??? {
??????? boolean val =false;
??????? for(int i = 0;i<9;i++)
??????? {
??????????? if(board[row][i] == value&&i!=column)
??????????? {
??????????????? val = true;
??????????????? break;
??????????? }
??????? }
??????? return val;
??? }
??? public boolean columnContainsValue(char[][] board,int row,int column,char value)
??? {
??????? boolean val =false;
??????? for(int i = 0;i<9;i++)
??????? {
??????????? if(board[i][column] == value&&i!=row)
??????????? {
??????????????? val = true;
??????????????? break;
??????????? }
??????? }
??????? return val;
??? }
??? public boolean squareContainsValue(char[][] board,int row,int column,char value)
??? {
??????? boolean val =false;
??????? boolean flag = false;
??????? for(int i = (row/3)*3;i<(row/3)*3+3&&!flag;i++)
??????? {
??????????? for(int j=(column/3)*3;j<(column/3)*3+3;j++)
??????????? {
??????????????? if(board[i][j] == value&&i!=row&&j!=column)
??????????????? {
??????????????????? val = true;
??????????????????? flag = true;
??????????????????? break;
??????????????? }
??????????? }
??????? }
??????? return val;
??? }
}
轉載于:https://www.cnblogs.com/jessiading/p/3784093.html
總結
以上是生活随笔為你收集整理的LeetCode:Sudoku Solver Valid Sudouku的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: event.x,event.client
- 下一篇: Yii框架里用grid.CGridVie