123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package main
- func isValidPart(part string) bool {
- switch len(part) {
- case 1: // \d
- return true
- case 2: // [^0]\d
- return part[0] != '0'
- case 3: // 1\d{2} || 2[0-4]\d || 25[1-5]
- if part[0] != '2' {
- return part[0] == '1'
- }
- return part[1] <= '4' ||
- (part[1] == '5' && part[2] <= '5')
- }
- return false
- }
- func restoreIpAddresses(s string) []string {
- result := []string{}
- strLen := len(s)
- if strLen < 4 || 12 < strLen {
- return result
- }
- for i := 1; i < 4 && i < strLen-2; i++ {
- for j := i + 1; j < i+4 && j < strLen-1; j++ {
- for k := j + 1; k < j+4 && k < strLen; k++ {
- if isValidPart(s[0:i]) && isValidPart(s[i:j]) &&
- isValidPart(s[j:k]) && isValidPart(s[k:]) {
- result = append(result, s[0:i]+"."+s[i:j]+"."+s[j:k]+"."+s[k:])
- }
- }
- }
- }
- return result
- }
- // func main() {
- // fmt.Println(restoreIpAddresses("25525511135"))
- // fmt.Println(restoreIpAddresses("0000"))
- // fmt.Println(restoreIpAddresses("00000"))
- // }
|