题目:
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ha… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
方法一:快慢指针
有环存在的话快指针、慢指针迟早会相遇的。
func isHappy(n int) bool {
fast := n
slow := Sum(n)
// slow := Sum(n),否则下面的循环无法执行
for fast != slow {
slow = Sum(slow)
fast = Sum(Sum(fast))
}
return fast == 1
}
func Sum(n int) int{
sum := 0
for n > 0 {
bit := n % 10
n = n / 10
sum = sum + bit * bit
}
return sum
}
方法二: 无限循环的话就是进入到环了
func isHappy(n int) bool {
exist := make(map[int]bool)
for n != 1 {
if exist[n] {
return false
}
exist[n] = true
tmp := 0
for n > 0 {
tmp = tmp + (n%10)*(n%10)
n = n / 10
}
n = tmp
}
return true
}