【哈希表】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
	}
}
相關文章
相關標籤/搜索