[快乐数](哈希表)
思路
核心思路:使用哈希集合检测循环
- 计算平方和:编写辅助函数计算数字各位数字的平方和
- 循环检测:使用哈希集合记录已经出现过的数字
- 终止条件:
- 如果得到1,返回true
- 如果数字重复出现,说明进入循环,返回false
代码实现分析
class Solution {
public:// 辅助函数:计算数字各位数字的平方和int sum(int n) {int ans = 0;while (n > 0) {int d = n % 10; // 获取最后一位数字n /= 10; // 去掉最后一位ans += d * d; // 平方并累加}return ans;}// 主函数:判断是否是快乐数bool isHappy(int n) {unordered_set<int> mp; // 用于记录已经出现过的数字while (n != 1) { // 循环直到得到1n = sum(n); // 计算平方和// 如果这个数字已经出现过,说明进入循环if (!mp.count(n)) {mp.insert(n); // 记录新数字} else {return false; // 出现重复,不是快乐数}}return true; // 得到1,是快乐数}
};
1. 平方和计算函数
int sum(int n) {int ans = 0;while (n > 0) {int d = n % 10; // 取最后一位数字n /= 10; // 去掉最后一位ans += d * d; // 平方累加}return ans;
}
- 例如:n=19 → 1²+9²=82
- 例如:n=82 → 8²+2²=68
2. 主循环逻辑
while (n != 1) {n = sum(n); // 计算下一个数字if (!mp.count(n)) { // 如果数字未出现过mp.insert(n); // 记录} else { // 如果数字已出现过return false; // 检测到循环}
}