Skip to content

Commit 35bde91

Browse files
committed
add new files
1 parent 4d8602f commit 35bde91

3 files changed

+114
-0
lines changed

71. Simplify Path.go

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package main
2+
3+
import "strings"
4+
5+
func simplifyPath(path string) string {
6+
dirs := strings.FieldsFunc(path, func(s rune) bool {
7+
if s == '/' {
8+
return true
9+
}
10+
return false
11+
})
12+
for i := 0; i < len(dirs); i++ {
13+
if dirs[i] == "." {
14+
dirs = append(dirs[:i], dirs[i+1:]...)
15+
i--
16+
} else {
17+
if dirs[i] == ".." {
18+
if i == 0 {
19+
dirs = dirs[1:]
20+
i--
21+
continue
22+
}
23+
dirs = append(dirs[:i-1], dirs[i+1:]...)
24+
i -= 2
25+
}
26+
}
27+
}
28+
res := "/"
29+
for i := 0; i < len(dirs); i++ {
30+
res += dirs[i]
31+
if i != len(dirs)-1 {
32+
res += "/"
33+
}
34+
}
35+
return res
36+
}

79. Word Search.go

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package main
2+
3+
func help(b [][]byte, word string, i, j int) bool {
4+
if word == "" {
5+
return true
6+
}
7+
if b[i][j] != word[0] {
8+
return false
9+
}
10+
if len(word) == 1 {
11+
return true
12+
}
13+
b[i][j] = '#'
14+
if i > 0 && help(b, word[1:], i-1, j) {
15+
return true
16+
}
17+
if j > 0 && help(b, word[1:], i, j-1) {
18+
return true
19+
}
20+
if i < len(b)-1 && help(b, word[1:], i+1, j) {
21+
return true
22+
}
23+
if j < len(b[0])-1 && help(b, word[1:], i, j+1) {
24+
return true
25+
}
26+
b[i][j] = word[0]
27+
return false
28+
}
29+
func exist(board [][]byte, word string) bool {
30+
if len(board) == 0 || len(board[0]) == 0 {
31+
return word == ""
32+
}
33+
if word == "" {
34+
return true
35+
}
36+
for i := 0; i < len(board); i++ {
37+
for j := 0; j < len(board[0]); j++ {
38+
if word[0] != board[i][j] {
39+
continue
40+
}
41+
if help(board, word, i, j) {
42+
return true
43+
}
44+
}
45+
}
46+
return false
47+
}
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package main
2+
3+
func search(nums []int, target int) bool {
4+
l := len(nums)
5+
if l == 0 {
6+
return false
7+
}
8+
left, right := 0, l-1
9+
for left <= right {
10+
mid := left + (right-left)/2
11+
if nums[mid] == target {
12+
return true
13+
} else if nums[mid] < nums[right] {
14+
if nums[mid] < target && nums[right] >= target {
15+
left = mid + 1
16+
} else {
17+
right = mid - 1
18+
}
19+
} else if nums[mid] > nums[right] {
20+
if nums[left] <= target && nums[mid] > target {
21+
right = mid - 1
22+
} else {
23+
left = mid + 1
24+
}
25+
} else {
26+
right--
27+
}
28+
29+
}
30+
return false
31+
}

0 commit comments

Comments
 (0)