diff --git a/Algorithms/Medium/FindKthBit.java b/Algorithms/Medium/FindKthBit.java new file mode 100644 index 0000000..d5064dd --- /dev/null +++ b/Algorithms/Medium/FindKthBit.java @@ -0,0 +1,35 @@ +// https://leetcode.com/problems/find-kth-bit-in-nth-binary-string/ +public class KthBit { + public static void main(String[] args) { + System.out.println(findKthBit(4, 11)); + } + public static char findKthBit(int n, int k) { + if(k==1){ + return '0'; + } + + return findNthString("0", n).charAt(k-1); + } + public static String findNthString(String s, int n){ + if(n==0){ + return s; + } + s = s + "1" + reverseInverse(s); + + return findNthString(s, n-1); + } + + public static String reverseInverse(String s){ + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '0') { + sb.append('1'); + } + else{ + sb.append('0'); + } + } + + return sb.reverse().toString(); + } +} \ No newline at end of file diff --git a/Algorithms/Medium/SudokuSolver.java b/Algorithms/Medium/SudokuSolver.java new file mode 100644 index 0000000..bb4580f --- /dev/null +++ b/Algorithms/Medium/SudokuSolver.java @@ -0,0 +1,81 @@ +// https://leetcode.com/problems/sudoku-solver/ +// Agniva +public class SudokuSolver { + public static void main(String[] args) { + int[][] board = new int[][]{ + {3, 0, 6, 5, 0, 8, 4, 0, 0}, + {5, 2, 0, 0, 0, 0, 0, 0, 0}, + {0, 8, 7, 0, 0, 0, 0, 3, 1}, + {0, 0, 3, 0, 1, 0, 0, 8, 0}, + {9, 0, 0, 8, 6, 3, 0, 0, 5}, + {0, 5, 0, 0, 9, 0, 6, 0, 0}, + {1, 3, 0, 0, 0, 0, 2, 5, 0}, + {0, 0, 0, 0, 0, 0, 0, 7, 4}, + {0, 0, 5, 2, 0, 6, 3, 0, 0} + }; + + solve(board, 0,0); + } + + public static void solve(int[][] board, int row, int col){ + if(row == board.length){ + display(board); + return; + } + int nRow = 0; + int nCol = 0; + if(col == board[0].length-1){ + nRow = row + 1; + nCol = 0; + }else{ + nRow = row; + nCol = col + 1; + } + + if(board[row][col] != 0){ + solve(board, nRow, nCol); + }else { + for (int po = 1; po <= 9; po++) { + if(isValid(board, row, col, po)){ + board[row][col] = po; + solve(board, nRow, nCol); + board[row][col] = 0; + } + } + } + + } + + public static boolean isValid(int[][] board, int row, int col, int num){ + for (int i = 0; i < board[0].length; i++) { + if(board[row][i] == num){ + return false; + } + } + for (int i = 0; i < board.length; i++) { + if(board[i][col] == num){ + return false; + } + } + int rowStart = row/3 * 3; + int colStart = col/3 * 3; + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if(board[rowStart+i][colStart+j] == num){ + return false; + } + } + } + return true; + } + + public static void display(int[][] board){ + for (int i = 0; i < board.length; i++) { + for (int j = 0; j < board[0].length; j++) { + System.out.print(board[i][j] + " "); + } + System.out.println(); + } + } +}