首页 > 其他 > 详细

【哈希表】leetcode202——快乐数

时间:2021-02-15 09:44:44      阅读:23      评论:0      收藏:0      [点我收藏+]

编号202: 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。

如果 n 是快乐数就返回 True ;不是,则返回 False 。

示例:

输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

思路

题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!,因为如果这个sum曾经出现过,则表明陷入死循环了,退出。如果sum==1,则返回true。

具体代码如下:

//使用哈希算法来判断这个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
	}
}

【哈希表】leetcode202——快乐数

原文:https://www.cnblogs.com/zmk-c/p/14403039.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!