Skip to content

Commit 4219a99

Browse files
committed
feat: add golang solution for lcof problem 12 13 14I
1 parent b1e9494 commit 4219a99

File tree

6 files changed

+152
-0
lines changed

6 files changed

+152
-0
lines changed

lcof/面试题12. 矩阵中的路径/README.md

+44
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,51 @@ var exist = function(board, word) {
138138
};
139139
```
140140

141+
### Go
142+
143+
```go
144+
func exist(board [][]byte, word string) bool {
145+
if len(board) == 0 {
146+
return false
147+
}
148+
//标记数组
149+
isVisited := make([][]bool,len(board))
150+
for i := 0; i < len(board); i++ {
151+
isVisited[i] = make([]bool, len(board[0]))
152+
}
153+
for i := 0; i < len(board); i++ {
154+
for j := 0; j < len(board[0]); j++ {
155+
if board[i][j] == word[0] {
156+
if bfs(board,i,j,isVisited,word,0) {
157+
return true
158+
}
159+
}
160+
}
161+
}
162+
return false
163+
}
164+
165+
func bfs(board [][]byte, i,j int, isVisited [][]bool, word string, index int) bool {
166+
if index == len(word) {
167+
return true
168+
}
169+
if i < 0 || j < 0 || i == len(board) || j == len(board[0]) || isVisited[i][j] || board[i][j] != word[index] {
170+
return false
171+
}
172+
isVisited[i][j] = true
173+
res := bfs(board, i+1, j, isVisited, word, index+1) ||
174+
bfs(board, i, j+1, isVisited, word, index+1) ||
175+
bfs(board, i-1, j, isVisited, word, index+1) ||
176+
bfs(board, i, j-1, isVisited, word, index+1)
177+
isVisited[i][j] = false
178+
return res
179+
}
180+
```
181+
182+
183+
141184
### ...
185+
142186
```
143187
144188
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
func exist(board [][]byte, word string) bool {
2+
if len(board) == 0 {
3+
return false
4+
}
5+
//标记数组
6+
isVisited := make([][]bool,len(board))
7+
for i := 0; i < len(board); i++ {
8+
isVisited[i] = make([]bool, len(board[0]))
9+
}
10+
for i := 0; i < len(board); i++ {
11+
for j := 0; j < len(board[0]); j++ {
12+
if board[i][j] == word[0] {
13+
if bfs(board,i,j,isVisited,word,0) {
14+
return true
15+
}
16+
}
17+
}
18+
}
19+
return false
20+
}
21+
22+
func bfs(board [][]byte, i,j int, isVisited [][]bool, word string, index int) bool {
23+
if index == len(word) {
24+
return true
25+
}
26+
if i < 0 || j < 0 || i == len(board) || j == len(board[0]) || isVisited[i][j] || board[i][j] != word[index] {
27+
return false
28+
}
29+
isVisited[i][j] = true
30+
res := bfs(board, i+1, j, isVisited, word, index+1) ||
31+
bfs(board, i, j+1, isVisited, word, index+1) ||
32+
bfs(board, i-1, j, isVisited, word, index+1) ||
33+
bfs(board, i, j-1, isVisited, word, index+1)
34+
isVisited[i][j] = false
35+
return res
36+
}

lcof/面试题13. 机器人的运动范围/README.md

+24
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,31 @@ var movingCount = function(m, n, k) {
127127
};
128128
```
129129

130+
### Go
131+
132+
```go
133+
func movingCount(m int, n int, k int) int {
134+
var visited [][]bool
135+
visited = make([][]bool,m)
136+
for i:=0; i< m; i++ {
137+
visited[i] = make([]bool,n)
138+
}
139+
return dfs(0,0,m,n,k,visited)
140+
}
141+
142+
func dfs(x,y,m,n,k int, visited [][]bool) int {
143+
if x >= m || y >=n || visited[x][y] || (x%10+x/10+y%10+y/10) >k {
144+
return 0
145+
}
146+
visited[x][y] = true
147+
return 1+ dfs(x+1,y,m,n,k,visited)+dfs(x,y+1,m,n,k,visited)
148+
}
149+
```
150+
151+
152+
130153
### ...
154+
131155
```
132156
133157
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func movingCount(m int, n int, k int) int {
2+
var visited [][]bool
3+
visited = make([][]bool,m)
4+
for i:=0; i< m; i++ {
5+
visited[i] = make([]bool,n)
6+
}
7+
return dfs(0,0,m,n,k,visited)
8+
}
9+
10+
func dfs(x,y,m,n,k int, visited [][]bool) int {
11+
if x >= m || y >=n || visited[x][y] || (x%10+x/10+y%10+y/10) >k {
12+
return 0
13+
}
14+
visited[x][y] = true
15+
return 1+ dfs(x+1,y,m,n,k,visited)+dfs(x,y+1,m,n,k,visited)
16+
}

lcof/面试题14- I. 剪绳子/README.md

+21
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,28 @@ var cuttingRope = function(n) {
8282
};
8383
```
8484

85+
86+
87+
### Go
88+
89+
```go
90+
func cuttingRope(n int) int {
91+
if n <= 3 {
92+
return n-1
93+
}
94+
sum := 1
95+
for n > 4 {
96+
sum *= 3
97+
n -= 3
98+
}
99+
return sum*n
100+
}
101+
```
102+
103+
104+
85105
### ...
106+
86107
```
87108
88109
```
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func cuttingRope(n int) int {
2+
if n <= 3 {
3+
return n-1
4+
}
5+
sum := 1
6+
for n > 4 {
7+
sum *= 3
8+
n -= 3
9+
}
10+
return sum*n
11+
}

0 commit comments

Comments
 (0)