LeetCode – Palindrome Pairs (Java)

Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that the concatenation of the two words, i.e. words[i] + words[j] is a palindrome. Example 1: Given words = [“bat”, “tab”, “cat”] Return [[0, 1], [1, 0]] The palindromes are [“battab”, “tabbat”] Java Solution public List<List<Integer>> … Read more

LeetCode – Reverse Linked List (Java)

Reverse a singly linked list. Java Solution 1 – Iterative public ListNode reverseList(ListNode head) { if(head==null||head.next==null) return head;   ListNode p1 = head; ListNode p2 = p1.next;   head.next = null; while(p1!=null&& p2!=null){ ListNode t = p2.next; p2.next = p1; p1 = p2; p2 = t; }   return p1; }public ListNode reverseList(ListNode head) { … Read more

LeetCode – Isomorphic Strings (Java)

Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. For example,”egg” and “add” are isomorphic, “foo” and “bar” are not. Java Solution 1 We can define a map which tracks the char-char mappings. If a value is already … Read more

LeetCode – Implement Trie (Prefix Tree) (Java)

Implement a trie with insert, search, and startsWith methods. Java Solution 1 A trie node should contains the character, its children and the flag that marks if it is a leaf node. You can use the trie in the following diagram to walk though the Java solution. class TrieNode { char c; HashMap<Character, TrieNode> children … Read more

LeetCode – Shortest Distance from All Buildings (Java)

Java Solution This problem can be solved by BFS. We define one matrix for tracking the distance from each building, and another matrix for tracking the number of buildings which can be reached. public int shortestDistance(int[][] grid) { int[][] distance = new int[grid.length][grid[0].length]; int[][] reach = new int[grid.length][grid[0].length];     int numBuilding = 0; for … Read more

LeetCode – Recover Binary Search Tree (Java)

Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Java Solution Inorder traveral will return values in an increasing order. So if an element is less than its previous element,the previous element is a swapped node. public class Solution { TreeNode first; TreeNode second; TreeNode … Read more

LeetCode – Maximum Depth of Binary Tree (Java)

Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. Java Solution public int maxDepth(TreeNode root) { if(root==null) return 0;   int leftDepth = maxDepth(root.left); int rightDepth = maxDepth(root.right);   int bigger = Math.max(leftDepth, rightDepth); … Read more

LeetCode – Binary Tree Paths (Java)

Given a binary tree, return all root-to-leaf paths. 1. Naive DFS Solution A typical depth-first search problem. public List<String> binaryTreePaths(TreeNode root) { ArrayList<String> finalResult = new ArrayList<String>();   if(root==null) return finalResult;   ArrayList<String> curr = new ArrayList<String>(); ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>();   dfs(root, results, curr);   for(ArrayList<String> al : results){ StringBuilder sb = new … Read more