Skip to content

Commit 0449e44

Browse files
author
beck chen
committed
add recursion and backtracking and visuals
1 parent d08593e commit 0449e44

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<mxfile host="Electron" modified="2021-08-26T17:35:43.791Z" agent="5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="MSLyCtLkK84S1TL8sjfb" version="14.6.13" type="device" pages="2"><diagram id="5uokHB6_kULKvT_LYLOu" name="LC17: Letter Combinations of a Phone Number">7Vxdk6I4FP0t+2D17sN0AQHEx9Ge7d2Hrd6q3qqZfUSISA0SK8RW99dvIuEriaOtBpjGrq5ucg2B3HO89+YQHYHZaveM/fXyLxTCZGQZ4W4EnkaWZQLToP+YZZ9bPNPKDRGOQ96pMrzG/0Fu5OdFmziEWaMjQSgh8bppDFCawoA0bD7GaNvstkBJ86prP4KS4TXwE9n6NQ7Jks/CMSr7HzCOlsWVTYO/svKLztyQLf0QbWsm8GUEZhghkh+tdjOYMOcVfsnP+/3Iq+WNYZiSc04g63+c2eQFLvcvrpXB9cvz8/wTH+XNTzZ8wk9xFJOM2g5N48ECD/z+yb5wCoE7esnpkqwSajDpYUYw+g5nKEGYWlKU0p7TRZwkgslP4iilzYDeNKT26RvEJKbu/sxfWMVhyC4z3S5jAl/XfsCuuaXkojaMNmkI2XwMNjxKCSeMVbb5TRbzoqPD3VGHmSUMlL8QrSDBe9qlOMHlyHHqmjZvbysilH2WNRIU5PA596Jy6AoeesARegdaloTWyHITBsWGHkTsIGTw/Um9tCshNIpO9Jplv8I2x8cth7HoAJ+owV8xAHhHyooHuXsCCcW0Rh1/HujgTgIXRMEcgtbvpY1pH6ZzPVMmTaYA05GZYiiY4uliCjjNlDhl4F7BjCMsq3qt9q8EV3RQUCZAq3mc+iRGacWbkTM9/H0aBHeALUQZcGaUKQl1c/LYEnn8/qeAW+FRRm+Oh62I+rYCDksXGo6Exny4aHhWx2i4EhrBI/sZECRiWaSKWK1iMlYkOwENWnyv2WGwwcl+iv3gOyRHHFhDrPKlqfClkFNu4VogxB5H9qyl8Kw70eVaT3ItdRj2CaRGROdK/+VlH7u4slQMBpHFTSGLOwrk2q0AJ6crQEUVZ2pYK4Bz1gohXAxjrWCL9YXZNVOKG/hR/IRp+JmpKSyEJn6WxUETF9FRcBeTb/w1dvwvc+ijw1tPO+7fQ2NfNFI6m2/1Ru0s1qxOO7SK8/KbhaEk5AiQ0AmhDQ7gD1zBK1/i4wiSU28uGeIahI4CwcKGYUKXPG/N21XByq/wN4pTUlsxiAwSo38+TX5WXRESBrKNI6VuMVDuB2mgA8vKaV9BPFl9wpBm6AzKAYPGFaMZr9jNVvGq2bO58tSxeulfYAFWE03gKQKLqaoetAWWy/Sqew5qOweNJ53nIJVgNcwc5JyZg/J3V2dJSMgdY3BpEnJPDKQ7Cclql5YkpEO06V9kkWgx7jwJyfrZOUnIuioJ1cfKfzlxsscEphH1hCpLWeeMX1pUGvrjepMtf/XD3+TzWJj7pTapeTXgAHg5NoVS15Wf0FgqXpZkvT0xZdkq1IBFT1VE22sC4iiWwa2KiKYsdcHhwuG6XcMh61eL4cIx7vqxRzHwvT4v4/bpAt1RY9xOge4IexIcscI6t0B3RWlbzIiaC3TrepVIUVgpVCId2bd/lZAzFiuhriv0IpQMqUKH9wr9RIXuKgrClit0S5YGPmTS6yxFCYq1O74wRUncEQfSnaJkjUFPitKxIulfKBBTlCoUtJyi5G0/mjb99BANof4bqza3qtAQhdzbofFhNvyID2IcQ5H0VOs88Unt7Xz7nh0/obJI0rFO79/bQty36yqga/cZmnXZlp+fuY6e35XuU3W0Z3eudBeJ4K50HwBRPGxvVcsDsqAyYKXbNLre4A9k/WPAUnf1CcrO8LjvRREj90mt2+p0R6SodU/E8vhSrdsTt1ZqFhLA9ZtRzhIS5jryb/9qIVFI8FSf4G1VSADD240yv2vdp2r0iaIkbLtGlxWuD5n0+qJ1m4b4LQGXit3ySLqTlCy/6UlSw1S7VcGg5SQla4CDVbtNY9K13A1Uup4Axc8pd3uKj6i0K3cXA9/l7nfK3RPVp4tuJHfTZvW1SHnWqr5cCnz5Hw==</diagram><diagram id="pSCcazf5C_0qfcGw3Gmh" name="LC212: Word Search II">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</diagram></mxfile>

Leetcode Visuals/Trees and Graphs.drawio

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* @param {string} digits
3+
* @return {string[]}
4+
*/
5+
var letterCombinations = function (digitsAsStr) {
6+
if (!digitsAsStr || digitsAsStr.length === 0) { return []; }
7+
const combinations = [];
8+
let buffer = '';
9+
let digitIndex = 0;
10+
traverse(digitsAsStr, buffer, digitIndex, combinations);
11+
12+
return combinations;
13+
};
14+
15+
function traverse(digitsAsStr, buffer, digitIndex, combinations) {
16+
if (digitIndex === digitsAsStr.length) {
17+
combinations.push(buffer);
18+
return;
19+
}
20+
21+
const currentDigit = digitsAsStr[digitIndex];
22+
if (currentDigit === '0' || currentDigit === '1') {
23+
traverse(digitsAsStr, buffer, digitIndex + 1, combinations);
24+
} else {
25+
const charsAsStr = getCharsFromDigit(currentDigit);
26+
for (let charIndex = 0; charIndex < charsAsStr.length; charIndex++) {
27+
traverse(digitsAsStr, buffer + charsAsStr[charIndex], digitIndex + 1, combinations);
28+
}
29+
}
30+
}
31+
32+
function getCharsFromDigit(digit) {
33+
const digitToCharsMap = {
34+
'2': 'abc',
35+
'3': 'def',
36+
'4': 'ghi',
37+
'5': 'jkl',
38+
'6': 'mno',
39+
'7': 'pqrs',
40+
'8': 'tuv',
41+
'9': 'wxyz'
42+
};
43+
44+
return digitToCharsMap[digit];
45+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* @param {character[][]} board
3+
* @param {string[]} words
4+
* @return {string[]}
5+
*/
6+
var findWords = function (board, words) {
7+
const rootTrieNode = buildTrie(words);
8+
9+
const numRows = board.length, numCols = board[0].length;
10+
const collection = new Set();
11+
for (let rowIndex = 0; rowIndex < numRows; rowIndex++) {
12+
for (let colIndex = 0; colIndex < numCols; colIndex++) {
13+
searchWord(rootTrieNode, board, rowIndex, colIndex, collection);
14+
}
15+
}
16+
17+
return [...collection];
18+
};
19+
20+
function searchWord(parentNode, board, rowIndex, colIndex, collection) {
21+
if (!board[rowIndex] || !board[rowIndex][colIndex]) { return; }
22+
23+
const tempChar = board[rowIndex][colIndex];
24+
board[rowIndex][colIndex] = '$';
25+
const currentNode = parentNode.children[tempChar];
26+
if (currentNode) {
27+
if (currentNode.word) {
28+
collection.add(currentNode.word);
29+
}
30+
searchWord(currentNode, board, rowIndex + 1, colIndex, collection);
31+
searchWord(currentNode, board, rowIndex - 1, colIndex, collection);
32+
searchWord(currentNode, board, rowIndex, colIndex + 1, collection);
33+
searchWord(currentNode, board, rowIndex, colIndex - 1, collection);
34+
}
35+
36+
board[rowIndex][colIndex] = tempChar;
37+
}
38+
39+
function buildTrie(wordsArr) {
40+
const root = new TrieNode();
41+
42+
for (let word of wordsArr) {
43+
let currentNode = root;
44+
for (let charIndex = 0; charIndex < word.length; charIndex++) {
45+
const currentChar = word[charIndex];
46+
if (!currentNode.children[currentChar]) {
47+
currentNode.children[currentChar] = new TrieNode();
48+
}
49+
50+
currentNode = currentNode.children[currentChar];
51+
}
52+
53+
currentNode.word = word;
54+
}
55+
56+
return root;
57+
}
58+
59+
class TrieNode {
60+
constructor() {
61+
this.children = {};
62+
}
63+
}

0 commit comments

Comments
 (0)