力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
使用哈希表循环判断每次经过平方和的数,如果为1则直接返回true,若之前存在过但不为1则直接返回false
- class Solution
- {
- public:
- // 计算快乐数
- int bitsum(int n)
- {
- int sum=0;
- while(n)
- {
- int a=n%10;
- sum+=a*a;
- n/=10;
- }
- return sum;
- }
- bool isHappy(int n)
- {
- unordered_set<int> hash;
- while(true)
- {
- int sum=bitsum(n);
- // 如果此次经过bitsum函数之后是1则直接返回true
- if(sum==1) return true;
- if(hash.find(sum) != hash.end())
- {
- // 该数存在过,但是不为1则直接返回false
- return false;
- }
- else
- {
- // 如果不为1也不存在,插入哈希表中
- hash.insert(sum);
- }
- n=sum;
- }
- }
- };
判断相遇的时候是否为1,若不为1则返回false,若为1则返回true
- class Solution
- {
- public:
- // 计算快乐数
- int bitsum(int n)
- {
- int sum=0;
- while(n)
- {
- int a=n%10;
- sum+=a*a;
- n/=10;
- }
- return sum;
- }
- bool isHappy(int n)
- {
- // 定义快慢指针
- int slow=n,fast=bitsum(n);
-
- // 只要快指针的数不等于慢指针就继续循环调用
- while(slow!=fast)
- {
- slow=bitsum(slow);
- fast=bitsum(bitsum(fast));
- }
- // 看最终相遇位置慢指针是否为1 若不为1则返回false
- return slow==1;
-
- }
- };