diff --git a/solution/0000-0099/0079.Word Search/README.md b/solution/0000-0099/0079.Word Search/README.md index 251a0731df458..f0bb53ed986b2 100644 --- a/solution/0000-0099/0079.Word Search/README.md +++ b/solution/0000-0099/0079.Word Search/README.md @@ -264,6 +264,42 @@ function exist(board: string[][], word: string): boolean { } ``` +#### JavaScript + +```js +function exist(board, word) { + const [m, n] = [board.length, board[0].length]; + const dirs = [-1, 0, 1, 0, -1]; + const dfs = (i, j, k) => { + if (k === word.length - 1) { + return board[i][j] === word[k]; + } + if (board[i][j] !== word[k]) { + return false; + } + const c = board[i][j]; + board[i][j] = '0'; + for (let u = 0; u < 4; ++u) { + const [x, y] = [i + dirs[u], j + dirs[u + 1]]; + const ok = x >= 0 && x < m && y >= 0 && y < n; + if (ok && board[x][y] !== '0' && dfs(x, y, k + 1)) { + return true; + } + } + board[i][j] = c; + return false; + }; + for (let i = 0; i < m; ++i) { + for (let j = 0; j < n; ++j) { + if (dfs(i, j, 0)) { + return true; + } + } + } + return false; +} +``` + #### Rust ```rust diff --git a/solution/0000-0099/0079.Word Search/README_EN.md b/solution/0000-0099/0079.Word Search/README_EN.md index 74075b7865b58..2e35b64450cbb 100644 --- a/solution/0000-0099/0079.Word Search/README_EN.md +++ b/solution/0000-0099/0079.Word Search/README_EN.md @@ -261,6 +261,42 @@ function exist(board: string[][], word: string): boolean { } ``` +#### JavaScript + +```js +function exist(board, word) { + const [m, n] = [board.length, board[0].length]; + const dirs = [-1, 0, 1, 0, -1]; + const dfs = (i, j, k) => { + if (k === word.length - 1) { + return board[i][j] === word[k]; + } + if (board[i][j] !== word[k]) { + return false; + } + const c = board[i][j]; + board[i][j] = '0'; + for (let u = 0; u < 4; ++u) { + const [x, y] = [i + dirs[u], j + dirs[u + 1]]; + const ok = x >= 0 && x < m && y >= 0 && y < n; + if (ok && board[x][y] !== '0' && dfs(x, y, k + 1)) { + return true; + } + } + board[i][j] = c; + return false; + }; + for (let i = 0; i < m; ++i) { + for (let j = 0; j < n; ++j) { + if (dfs(i, j, 0)) { + return true; + } + } + } + return false; +} +``` + #### Rust ```rust diff --git a/solution/0000-0099/0079.Word Search/Solution.js b/solution/0000-0099/0079.Word Search/Solution.js new file mode 100644 index 0000000000000..068b77d9588f0 --- /dev/null +++ b/solution/0000-0099/0079.Word Search/Solution.js @@ -0,0 +1,31 @@ +function exist(board, word) { + const [m, n] = [board.length, board[0].length]; + const dirs = [-1, 0, 1, 0, -1]; + const dfs = (i, j, k) => { + if (k === word.length - 1) { + return board[i][j] === word[k]; + } + if (board[i][j] !== word[k]) { + return false; + } + const c = board[i][j]; + board[i][j] = '0'; + for (let u = 0; u < 4; ++u) { + const [x, y] = [i + dirs[u], j + dirs[u + 1]]; + const ok = x >= 0 && x < m && y >= 0 && y < n; + if (ok && board[x][y] !== '0' && dfs(x, y, k + 1)) { + return true; + } + } + board[i][j] = c; + return false; + }; + for (let i = 0; i < m; ++i) { + for (let j = 0; j < n; ++j) { + if (dfs(i, j, 0)) { + return true; + } + } + } + return false; +}