2025-03-31-01
This commit is contained in:
parent
ffb1da1215
commit
0e25a6e997
125
技术/Go/算法相关.md
125
技术/Go/算法相关.md
@ -370,6 +370,92 @@ func repeatedSubstringPattern(s string) bool {
|
||||
~~~
|
||||
|
||||
|
||||
## 判断IP地址
|
||||
~~~ go
|
||||
import "strings"
|
||||
/**
|
||||
* 验证IP地址
|
||||
* @param IP string字符串 一个IP地址字符串
|
||||
* @return string字符串
|
||||
*/
|
||||
func solve( IP string ) string {
|
||||
if isIpv4(IP) {
|
||||
return "IPv4"
|
||||
}
|
||||
if isIpv6(IP) {
|
||||
return "IPv6"
|
||||
}
|
||||
return "Neither"
|
||||
}
|
||||
|
||||
func isIpv4(ip string) bool {
|
||||
//首先判断字符串是不是大于7(1.1.1.1),首尾不能是 .
|
||||
if len(ip) < 7 || ip[0] == '.' || ip[len(ip) - 1] == '.' {
|
||||
return false
|
||||
}
|
||||
//分割之后长度不能少于4
|
||||
strSlice := strings.Split(ip,".")
|
||||
if len(strSlice) != 4 {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, str := range strSlice {
|
||||
k := len(str)
|
||||
//开头不能是0
|
||||
// str = []byte(str)
|
||||
if k == 0 || str[0] == '0' && k > 1 || k > 3 {
|
||||
return false
|
||||
}
|
||||
|
||||
num := 0
|
||||
|
||||
for i:=0;i<len(str);i++{
|
||||
//必须是数字
|
||||
c := str[i]
|
||||
|
||||
if c < '0' || c > '9' {
|
||||
return false
|
||||
}
|
||||
num = num * 10 + int((c-'0'))
|
||||
|
||||
//不能超过255
|
||||
if num > 255 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
func isIpv6(ip string) bool {
|
||||
//首先判断字符串是不是小于15(1.1.1.1),首尾不能是 .
|
||||
if len(ip) < 7 || ip[0] == '.' || ip[len(ip) - 1] == '.' {
|
||||
return false
|
||||
}
|
||||
strSlice := strings.Split(ip,":")
|
||||
if len(strSlice) != 8 {
|
||||
return false
|
||||
}
|
||||
for _, str := range strSlice {
|
||||
k := len(str)
|
||||
//开头不能是0
|
||||
// str = []byte(str)
|
||||
if k == 0 || k > 4 {
|
||||
return false
|
||||
}
|
||||
for i:=0;i<len(str);i++{
|
||||
c := string(str[i])
|
||||
//必须是数字
|
||||
if !((c <= "f" && c >= "a") || (c <= "F" && c >= "A") || (c >= "0" && c <= "9")) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
~~~
|
||||
|
||||
|
||||
## 快速排序
|
||||
|
||||
@ -459,43 +545,28 @@ left, right := 0, len(nums)-1
|
||||
## 字符串相加
|
||||
|
||||
```go
|
||||
func max(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func addStrings(num1 string, num2 string) string {
|
||||
buf := make([]byte, max(len(num1), len(num2)) + 1)
|
||||
length := len(buf) - 1
|
||||
func solve(s string, t string) (ans string) {
|
||||
buf := make([]byte, 0, max(len(s), len(t))+1)
|
||||
add := 0
|
||||
for i, j := len(num1)-1, len(num2)-1; j >= 0 || i >= 0; {
|
||||
num := add
|
||||
for i, j := len(s)-1, len(t)-1; i >= 0 || j >= 0; {
|
||||
if i >= 0 {
|
||||
num += int(num1[i] - '0') //转Int
|
||||
add += int(s[i] - '0')
|
||||
i--
|
||||
}
|
||||
if j >= 0 {
|
||||
num += int(num2[j] - '0')
|
||||
add += int(t[j] - '0')
|
||||
j--
|
||||
}
|
||||
if num >= 10 {
|
||||
num %= 10
|
||||
add = 1
|
||||
} else {
|
||||
add = 0
|
||||
buf = append(buf, byte(add%10)+'0')
|
||||
add /= 10
|
||||
}
|
||||
buf[length] = byte(num+'0')
|
||||
length--
|
||||
if add > 0 {
|
||||
buf = append(buf, byte(add)+'0')
|
||||
}
|
||||
if add != 0 {
|
||||
buf[length] = '1'
|
||||
for _, v := range buf {
|
||||
ans = string(v) + ans
|
||||
}
|
||||
if buf[0]==0{
|
||||
buf=buf[1:]
|
||||
}
|
||||
return string(buf)
|
||||
return ans
|
||||
}
|
||||
```
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user