快乐数这题有两个关键
一个是求n的 各个位上平方和
另一个是判断是否为快乐数的依据是是否在哈希表中找到已经出现过的数
1求各个位上平方和方法
定义sum
sum = N除以十取余的平方和
n/10
循环终止条件是n=0
2查找一个数是否出现,用哈希表unordered_set ,
插入用set.insert
找到重复出现的数,用set.find(n) != set.end()
/** @lc app=leetcode.cn id=202 lang=cpp** [202] 快乐数*/// @lc code=start
class Solution {
public:int getSum(int n){int sum = 0;while(n){sum += (n%10)*(n%10);n = n/10;}return sum;}bool isHappy(int n) {unordered_set<int> set;while(1){n = getSum(n);if(n == 1) return true;if(set.find(n) != set.end()){return false;}else{set.insert(n);}}}
};
// @lc code=end