From 0e25a6e997936e467fa610b4eba4bc516572ea79 Mon Sep 17 00:00:00 2001 From: kaku Date: Mon, 31 Mar 2025 12:58:00 +0800 Subject: [PATCH] 2025-03-31-01 --- 技术/Go/算法相关.md | 131 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 101 insertions(+), 30 deletions(-) diff --git a/技术/Go/算法相关.md b/技术/Go/算法相关.md index c259d15..abbca6b 100644 --- a/技术/Go/算法相关.md +++ b/技术/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 '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= "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') - j-- + add += int(t[j] - '0') + j-- } - if num >= 10 { - num %= 10 - add = 1 - } else { - add = 0 - } - buf[length] = byte(num+'0') - length-- + buf = append(buf, byte(add%10)+'0') + add /= 10 } - if add != 0 { - buf[length] = '1' - } - if buf[0]==0{ - buf=buf[1:] - } - return string(buf) + if add > 0 { + buf = append(buf, byte(add)+'0') + } + for _, v := range buf { + ans = string(v) + ans + } + return ans } ```