diff --git a/problems/0017.电话号码的字母组合.md b/problems/0017.电话号码的字母组合.md
index b3ba1e5e..90296efd 100644
--- a/problems/0017.电话号码的字母组合.md
+++ b/problems/0017.电话号码的字母组合.md
@@ -694,6 +694,44 @@ object Solution {
}
```
+### Ruby
+```ruby
+def letter_combinations(digits)
+ letter_map = {
+ 2 => ['a','b','c'],
+ 3 => ['d','e','f'],
+ 4 => ['g','h','i'],
+ 5 => ['j','k','l'],
+ 6 => ['m','n','o'],
+ 7 => ['p','q','r','s'],
+ 8 => ['t','u','v'],
+ 9 => ['w','x','y','z']
+ }
+
+ result = []
+ path = []
+
+ return result if digits.size == 0
+
+ backtracking(result, letter_map, digits.split(''), path, 0)
+ result
+end
+
+def backtracking(result, letter_map, digits, path, index)
+ if path.size == digits.size
+ result << path.join('')
+ return
+ end
+
+ hash[digits[index].to_i].each do |chr|
+ path << chr
+ #index + 1代表处理下一个数字
+ backtracking(result, letter_map, digits, path, index + 1)
+ #回溯,撤销处理过的数字
+ path.pop
+ end
+end
+```
diff --git a/problems/0200.岛屿数量.广搜版.md b/problems/0200.岛屿数量.广搜版.md
index 8bbedb59..e8ed60db 100644
--- a/problems/0200.岛屿数量.广搜版.md
+++ b/problems/0200.岛屿数量.广搜版.md
@@ -239,6 +239,42 @@ class Solution:
visited[next_i][next_j] = True
```
+### JavaScript
+```javascript
+var numIslands = function (grid) {
+ let dir = [[0, 1], [1, 0], [-1, 0], [0, -1]]; // 四个方向
+ let bfs = (grid, visited, x, y) => {
+ let queue = [];
+ queue.push([x, y]);
+ visited[x][y] = true;
+ while (queue.length) {
+ let top = queue.shift();//取出队列头部元素
+ console.log(top)
+ for (let i = 0; i < 4; i++) {
+ let nextX = top[0] + dir[i][0]
+ let nextY = top[1] + dir[i][1]
+ if (nextX < 0 || nextX >= grid.length || nextY < 0 || nextY >= grid[0].length)
+ continue;
+ if (!visited[nextX][nextY] && grid[nextX][nextY] === "1") {
+ queue.push([nextX, nextY])
+ visited[nextX][nextY] = true
+ }
+ }
+ }
+ }
+ let visited = new Array(grid.length).fill().map(() => Array(grid[0].length).fill(false))
+ let res = 0
+ for (let i = 0; i < grid.length; i++) {
+ for (let j = 0; j < grid[i].length; j++) {
+ if (!visited[i][j] && grid[i][j] === "1") {
+ ++res;
+ bfs(grid, visited, i, j);
+ }
+ }
+ }
+ return res
+};
+```
### Rust
diff --git a/problems/0200.岛屿数量.深搜版.md b/problems/0200.岛屿数量.深搜版.md
index 905c0979..c7649971 100644
--- a/problems/0200.岛屿数量.深搜版.md
+++ b/problems/0200.岛屿数量.深搜版.md
@@ -219,7 +219,7 @@ class Solution {
}
```
-Python:
+### Python:
```python
# 版本一
@@ -278,8 +278,91 @@ class Solution:
return result
```
+### JavaScript
-Rust:
+```javascript
+var numIslands = function (grid) {
+ let dir = [[0, 1], [1, 0], [-1, 0], [0, -1]]; // 四个方向
+
+ let dfs = (grid, visited, x, y) => {
+ for (let i = 0; i < 4; i++) {
+ let nextX = x + dir[i][0]
+ let nextY = y + dir[i][1]
+ if (nextX < 0 || nextX >= grid.length || nextY < 0 || nextY >= grid[0].length)
+ continue;
+ if (!visited[nextX][nextY] && grid[nextX][nextY] === "1") {
+ visited[nextX][nextY] = true
+ dfs(grid,visited,nextX,nextY)
+ }
+ }
+ }
+ let visited = new Array(grid.length).fill().map(() => Array(grid[0].length).fill(false))
+
+ let res = 0
+ for (let i = 0; i < grid.length; i++) {
+ for (let j = 0; j < grid[i].length; j++) {
+ if (!visited[i][j] && grid[i][j] === "1") {
+ ++res;
+ visited[i][j] = true;
+ dfs(grid, visited, i, j);
+ }
+ }
+ }
+ return res
+};
+```
+
+### Go
+
+```go
+func numIslands(grid [][]byte) int {
+ // 用1标记已访问
+ visited := make([][]int, len(grid))
+ for i := 0; i < len(visited); i++{
+ visited[i] = make([]int, len(grid[0]))
+ }
+
+ var bfs func(x, y int)
+ bfs = func(x, y int){
+ stack := make([][]int, 0)
+ stack = append(stack, []int{x, y})
+ moveX := []int{1, -1, 0, 0}
+ moveY := []int{0, 0, 1, -1}
+
+ for len(stack) != 0{
+ node := stack[len(stack) - 1]
+ stack = stack[:len(stack) - 1]
+
+ for i := 0; i < 4; i++{
+ dx := moveX[i] + node[0]
+ dy := moveY[i] + node[1]
+ if dx < 0 || dx >= len(grid) || dy < 0 || dy >= len(grid[0]) || visited[dx][dy] == 1{
+ continue
+ }
+ visited[dx][dy] = 1
+ if grid[dx][dy] == '1'{
+ stack = append(stack, []int{dx,dy})
+ }
+ }
+ }
+ }
+
+ result := 0
+ for i := 0; i < len(grid); i++{
+ for j := 0; j < len(grid[0]); j++{
+ if visited[i][j] == 0 && grid[i][j] == '1'{
+ bfs(i, j)
+ visited[i][j] = 1
+ result++
+ }
+ }
+ }
+
+ return result
+}
+```
+
+### Rust:
```rust
diff --git a/problems/0695.岛屿的最大面积.md b/problems/0695.岛屿的最大面积.md
index 3dd181a3..74470ae5 100644
--- a/problems/0695.岛屿的最大面积.md
+++ b/problems/0695.岛屿的最大面积.md
@@ -391,6 +391,44 @@ class Solution:
self.dfs(grid, visited, new_x, new_y)
```
+### JavaScript
+```javascript
+var maxAreaOfIsland = function (grid) {
+ let dir = [[0, 1], [1, 0], [-1, 0], [0, -1]]; // 四个方向
+
+ let visited = new Array(grid.length).fill().map(() => Array(grid[0].length).fill(false))
+
+ let dfs = (grid, visited, x, y, m) => {
+ for (let i = 0; i < 4; i++) {
+ let nextX = x + dir[i][0]
+ let nextY = y + dir[i][1]
+ if (nextX < 0 || nextX >= grid.length || nextY < 0 || nextY >= grid[0].length)
+ continue;
+ if (!visited[nextX][nextY] && grid[nextX][nextY] === 1) {
+ visited[nextX][nextY] = true
+ m = dfs(grid, visited, nextX, nextY,m+1)
+ }
+ }
+ return m
+ }
+
+ let max = 0
+
+ for (let i = 0; i < grid.length; i++) {
+ for (let j = 0; j < grid[i].length; j++) {
+ if (!visited[i][j] && grid[i][j] === 1) {
+ // 深度优先
+ visited[i][j] = true;
+ let m = dfs(grid, visited, i, j, 1);
+ if (m > max) max = m;
+ }
+ }
+ }
+ return max
+};
+```
+
+
### Rust
dfs: 版本一
@@ -530,7 +568,6 @@ impl Solution {
}
}
```
-
diff --git a/problems/0797.所有可能的路径.md b/problems/0797.所有可能的路径.md
index 9d14bd7c..bcce9314 100644
--- a/problems/0797.所有可能的路径.md
+++ b/problems/0797.所有可能的路径.md
@@ -217,8 +217,61 @@ class Solution:
self.path.pop() # 回溯
```
+
+### JavaScript
+```javascript
+var allPathsSourceTarget = function(graph) {
+ let res=[],path=[]
+
+ function dfs(graph,start){
+ if(start===graph.length-1){
+ res.push([...path])
+ return;
+ }
+ for(let i=0;i>) -> Vec> {