202. 快乐数

145 阅读1分钟

题目:
编写一个算法来判断一个数 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
}