力扣链接:
https://leetcode-cn.com/probl...
解题思路:
- 编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:
(1)对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
(2)然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
(3)如果这个过程 结果为 1,那么这个数就是快乐数。
(4)如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 - 重点一是求每个位置上的平方和,n%10求最后一位,n/10删除掉最后一位
- 第二个重点是对于满足条件的判断,首先是循环,直到sum为1,或者sum中有重复值出现说明有循环,这个时候就需要哈希表来记录出现过的sum值
func isHappy(n int) bool {
// 使用哈希表来判断
m := make(map[int]bool)
for {
sum := getSum(n)
if sum == 1 {
return true
}
if _, ok := m[sum]; ok {
return false
}
m[sum] = true
n = sum
}
return false
}
// 重点之一在于如何分解位数求平均和,n%10求的当前数的最后一位,n/10删除最后一位
func getSum(n int) int {
sum := 0
for n != 0 {
sum += (n%10) * (n%10)
n = n / 10
}
return sum
}