【哈希表】leetcode202——快乐数

编号202: 快乐数

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