代码1:
- step函数对数进行处理,(n%10)得到个位数,(n/10)将当前个位数剔除,直到得到每一位数,即(n>0),返回sum
- for循环,直到(n==1)或出现循环,
- 退出for后,判断是因为什么退出的for循环,即 n 是不是 1
- 直接
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
}