0


Golang | Leetcode Golang题解之第306题累加数

题目:

题解:

  1. func stringAdd(x, y string) string {
  2. res := []byte{}
  3. carry, cur := 0, 0
  4. for x != "" || y != "" || carry != 0 {
  5. cur = carry
  6. if x != "" {
  7. cur += int(x[len(x)-1] - '0')
  8. x = x[:len(x)-1]
  9. }
  10. if y != "" {
  11. cur += int(y[len(y)-1] - '0')
  12. y = y[:len(y)-1]
  13. }
  14. carry = cur / 10
  15. cur %= 10
  16. res = append(res, byte(cur)+'0')
  17. }
  18. for i, n := 0, len(res); i < n/2; i++ {
  19. res[i], res[n-1-i] = res[n-1-i], res[i]
  20. }
  21. return string(res)
  22. }
  23. func valid(num string, secondStart, secondEnd int) bool {
  24. n := len(num)
  25. firstStart, firstEnd := 0, secondStart-1
  26. for secondEnd <= n-1 {
  27. third := stringAdd(num[firstStart:firstEnd+1], num[secondStart:secondEnd+1])
  28. thirdStart := secondEnd + 1
  29. thirdEnd := secondEnd + len(third)
  30. if thirdEnd >= n || num[thirdStart:thirdEnd+1] != third {
  31. break
  32. }
  33. if thirdEnd == n-1 {
  34. return true
  35. }
  36. firstStart, firstEnd = secondStart, secondEnd
  37. secondStart, secondEnd = thirdStart, thirdEnd
  38. }
  39. return false
  40. }
  41. func isAdditiveNumber(num string) bool {
  42. n := len(num)
  43. for secondStart := 1; secondStart < n-1; secondStart++ {
  44. if num[0] == '0' && secondStart != 1 {
  45. break
  46. }
  47. for secondEnd := secondStart; secondEnd < n-1; secondEnd++ {
  48. if num[secondStart] == '0' && secondStart != secondEnd {
  49. break
  50. }
  51. if valid(num, secondStart, secondEnd) {
  52. return true
  53. }
  54. }
  55. }
  56. return false
  57. }
标签: Golang Leetcode 题解

本文转载自: https://blog.csdn.net/weixin_66442839/article/details/140811919
版权归原作者 __AtYou__ 所有, 如有侵权,请联系我们删除。

“Golang | Leetcode Golang题解之第306题累加数”的评论:

还没有评论