Day 27 of LeetCode

Day 27 of LeetCode

ยท

2 min read

Documenting LeetCode solving.

Q82

79. Word Search

Medium. Backtrack.

class Solution {
    public boolean exist(char[][] board, String word) {
        int ROWS = board.length;
        int COLS = board[0].length;

        for (int r = 0; r < ROWS; r++) {
            for (int c = 0; c < COLS; c++) {
                if (dfs(board, r, c, word, 0)) {
                    return true;
                }
            }
        }

        return false;
    }

    public boolean dfs(char[][] board, int i, int j, String word, int p) {
        int ROWS = board.length;
        int COLS = board[0].length;

        if (p == word.length()) {
            return true;
        }
        if (i < 0 || j < 0 || i >= ROWS || j >= COLS ||
            board[i][j] != word.charAt(p)) {
            return false;
        }
        // add a '-' to mark as visited.
        board[i][j] = (char)(-board[i][j]);
        boolean res = (dfs(board, i + 1, j, word, p + 1) ||
                       dfs(board, i - 1, j, word, p + 1) ||
                       dfs(board, i, j + 1, word, p + 1) ||
                       dfs(board, i, j - 1, word, p + 1));
        // unmark
        board[i][j] = (char)(-board[i][j]);
        return res;
    }
}

Q83

131. Palindrome Partitioning

Medium. Backtrack.

class Solution {

    List<List<String>> res = new ArrayList<>();
    ArrayList<String> track = new ArrayList<>();

    public List<List<String>> partition(String s) {
        backtrack(0, s);
        return res;
    }

    public void backtrack(int i, String s) {
        if (i >= s.length()) {
            res.add(new ArrayList<>(track));
            return;
        }

        for (int j = i; j < s.length(); j++) {
            if (isPali(s, i, j)) {
                track.add(s.substring(i, j + 1));
                backtrack(j + 1, s);
                track.remove(track.size() - 1);
            }
        }
    }

    public boolean isPali(String s, int l, int r) {
        while (l < r) {
            if (s.charAt(l) != s.charAt(r)) {
                return false;
            }
            l++;
            r--;
        }
        return true;
    }
}

Q84

17. Letter Combinations of a Phone Number

Medium. Backtrack.

class Solution {

    List<String> res = new ArrayList<>();
    String[] mapping = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

    public List<String> letterCombinations(String digits) {
        if (digits.isEmpty()) {
            return res;
        }
        backtrack(digits, 0, new StringBuilder());
        return res;
    }

    public void backtrack(String digits, int start, StringBuilder sb) {
        if (sb.length() == digits.length()) {
            res.add(sb.toString());
            return;
        }
        for (int i = start; i < digits.length(); i++) {
            int digit = digits.charAt(i) - '0';
            for (char c : mapping[digit].toCharArray()) {
                sb.append(c);
                backtrack(digits, i + 1, sb);
                sb.deleteCharAt(sb.length() - 1);
            }
        }
    }
}

Did you find this article valuable?

Support ๐Ÿฐ Evelyn's Learning Journey by becoming a sponsor. Any amount is appreciated!

ย