题目描述
思路一
集合判断
如果一个数是快乐数,那么最终会变回到1,确定了循环的终止条件;
若不是快乐数,会进入死循环,如何终至死循环,将每次变换过后的值存入Set中,判断是否出现过重复值,出现则return false;
思路二
快慢指针
“快指针”每次走两步,“慢指针”每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为1引起的循环,是的话就是快乐数,否则不是快乐数。
func isHappy(n int) bool {
var fast, slow int = n, n
for {
slow = numTotal(slow)
fast = numTotal(fast)
fast = numTotal(fast)
if fast == slow {
break
}
}
return slow == 1
}
func numTotal(n int) int {
var sum int
for n > 0 {
tmp := (n % 10)
sum += (tmp * tmp)
n /= 10
}
return sum
}