編寫一個算法來判斷一個數 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 } }