93.go 965 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package main
  2. func isValidPart(part string) bool {
  3. switch len(part) {
  4. case 1: // \d
  5. return true
  6. case 2: // [^0]\d
  7. return part[0] != '0'
  8. case 3: // 1\d{2} || 2[0-4]\d || 25[1-5]
  9. if part[0] != '2' {
  10. return part[0] == '1'
  11. }
  12. return part[1] <= '4' ||
  13. (part[1] == '5' && part[2] <= '5')
  14. }
  15. return false
  16. }
  17. func restoreIpAddresses(s string) []string {
  18. result := []string{}
  19. strLen := len(s)
  20. if strLen < 4 || 12 < strLen {
  21. return result
  22. }
  23. for i := 1; i < 4 && i < strLen-2; i++ {
  24. for j := i + 1; j < i+4 && j < strLen-1; j++ {
  25. for k := j + 1; k < j+4 && k < strLen; k++ {
  26. if isValidPart(s[0:i]) && isValidPart(s[i:j]) &&
  27. isValidPart(s[j:k]) && isValidPart(s[k:]) {
  28. result = append(result, s[0:i]+"."+s[i:j]+"."+s[j:k]+"."+s[k:])
  29. }
  30. }
  31. }
  32. }
  33. return result
  34. }
  35. // func main() {
  36. // fmt.Println(restoreIpAddresses("25525511135"))
  37. // fmt.Println(restoreIpAddresses("0000"))
  38. // fmt.Println(restoreIpAddresses("00000"))
  39. // }