Documenting LeetCode solving.
Q82
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
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);
}
}
}
}
ย