编写一个算法来判断一个数 n 是否是快乐数。算法
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每一个位置上的数字的平方和,而后重复这个过程直到这个数变为 1,也多是 无限循环 但始终变不到 1。若是 能够变为 1,那么这个数就是快乐数。app
若是 n 是快乐数就返回 True ;不是,则返回 False 。code
示例:get
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1class
题目中说了会 无限循环,那么也就是说求和的过程当中,sum会重复出现,这对解题很重要!,由于若是这个sum曾经出现过,则代表陷入死循环了,退出。若是sum==1,则返回true。循环
具体代码以下:map
//使用哈希算法来判断这个sum是否重复出现,若是重复出现,返回false。不然一直找到sum=1为止 func getSum(n int) int { //求和 sum := 0 for n != 0 { sum += (n % 10) * (n % 10) n /= 10 } return sum } func isHappy(n int) bool { mp := make(map[int]bool) for { sum := getSum(n) if sum == 1 { //若是sum==1则代表找到快乐数 退出 return true } //若是这个sum曾经出现过 则代表陷入死循环了 return false if mp[sum] == true { return false } mp[sum] = true n = sum } }