diff --git a/Java/Valid_Sudoko_problem/problem.md b/Java/Valid_Sudoko_problem/problem.md new file mode 100644 index 0000000..14056c6 --- /dev/null +++ b/Java/Valid_Sudoko_problem/problem.md @@ -0,0 +1,40 @@ +Link to the problem statement: https://leetcode.com/problems/valid-sudoku/description/ + + +Problem Statement: Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules: + +Each row must contain the digits 1-9 without repetition. +Each column must contain the digits 1-9 without repetition. +Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition. +Note: + +A Sudoku board (partially filled) could be valid but is not necessarily solvable. +Only the filled cells need to be validated according to the mentioned rules. + + +Example 1: +Input: board = +[["5","3",".",".","7",".",".",".","."] +,["6",".",".","1","9","5",".",".","."] +,[".","9","8",".",".",".",".","6","."] +,["8",".",".",".","6",".",".",".","3"] +,["4",".",".","8",".","3",".",".","1"] +,["7",".",".",".","2",".",".",".","6"] +,[".","6",".",".",".",".","2","8","."] +,[".",".",".","4","1","9",".",".","5"] +,[".",".",".",".","8",".",".","7","9"]] +Output: true + +Example 2: +Input: board = +[["8","3",".",".","7",".",".",".","."] +,["6",".",".","1","9","5",".",".","."] +,[".","9","8",".",".",".",".","6","."] +,["8",".",".",".","6",".",".",".","3"] +,["4",".",".","8",".","3",".",".","1"] +,["7",".",".",".","2",".",".",".","6"] +,[".","6",".",".",".",".","2","8","."] +,[".",".",".","4","1","9",".",".","5"] +,[".",".",".",".","8",".",".","7","9"]] +Output: false +Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid. \ No newline at end of file diff --git a/Java/Valid_Sudoko_problem/solution.java b/Java/Valid_Sudoko_problem/solution.java new file mode 100644 index 0000000..5498fa6 --- /dev/null +++ b/Java/Valid_Sudoko_problem/solution.java @@ -0,0 +1,37 @@ +// Collect the set of things we see, encoded as strings. For example: + +// '4' in row 7 is encoded as "(4)7". +// '4' in column 7 is encoded as "7(4)". +// '4' in the top-right block is encoded as "0(4)2". +// Scream false if we ever fail to add something because it was already added (i.e., seen before). + +import java.util.*; + +class solution{ + public static void main(String[] args) { + char[][] board = {{'5','3','.','.','7','.','.','.','.'} + ,{'6','.','.','1','9','5','.','.','.'} + ,{'.','9','8','.','.','.','.','6','.'} + ,{'8','.','.','.','6','.','.','.','.'} + ,{'4','.','.','8','.','3','.','.','1'} + ,{'7','.','.','.','2','.','.','.','6'} + ,{'.','6','.','.','.','.','2','8','.'} + ,{'.','.','.','4','1','9','.','.','5'} + ,{'.','.','.','.','8','.','.','7','9'}}; + + System.out.println(isValidSudoko(board)); + } + public static boolean isValidSudoko(char[][] board) { + Set seen = new HashSet(); + for (int i=0; i<9; ++i) { + for (int j=0; j<9; ++j) { + if (board[i][j] != '.') { + String b = "(" + board[i][j] + ")"; + if (!seen.add(b + i) || !seen.add(j + b) || !seen.add(i/3 + b + j/3)); + return false; + } + } + } + return true; + } +}