快乐数

96 阅读1分钟

image.png

代码1:

  1. step函数对数进行处理,(n%10)得到个位数,(n/10)将当前个位数剔除,直到得到每一位数,即(n>0),返回sum
  2. for循环,直到(n==1)或出现循环,
  3. 退出for后,判断是因为什么退出的for循环,即 n 是不是 1
  4. 直接 return n == 1即可
func isHappy(n int) bool {
    m := map[int]bool{}
    for  n != 1 && !m[n] {
        n, m[n] = step(n), true
    }
    return n == 1
}

func step(n int) int {
    sum := 0
    for n > 0 {
        sum += (n%10) * (n%10)
        n /= 10
    }
    return sum
}

代码2:

快慢指针

func isHappy(n int) bool {
    slow, fast := n, step(n)
    for  fast != 1 && fast != slow {
       slow, fast = step(slow), step(step(fast))
    }
    return fast == 1
}

func step(n int) int {
    sum := 0
    for n > 0 {
        sum += (n%10) * (n%10)
        n /= 10
    }
    return sum
}