共计 566 个字符,预计需要花费 2 分钟才能阅读完成。
力扣链接:
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 | |
} |
正文完