编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n
是 快乐数 就返回 true
;不是,则返回 false
。
思路一:找规律
c语言解法
bool isHappy(int n){while(n>=10){int k=0;while(n>0){k+=pow(n%10,2);n=n/10;}n=k;}if(n==1||n==7){return true;}else{return false;}
}
分析:
本题要判断是否为快乐数,根据快乐数的定义,可以列举几个例子找规律。最后找出当个位数为1或7时可验证为快乐数
思路二:双指针(快慢指针)
c++解法
class Solution {
public:int bitSquareSum(int n) {int sum = 0;while(n > 0){int bit = n % 10;sum += bit * bit;n = n / 10;}return sum;}bool isHappy(int n) {int slow = n, fast = n;do{slow = bitSquareSum(slow);fast = bitSquareSum(fast);fast = bitSquareSum(fast);}while(slow != fast);return slow == 1;}
};
分析:
除找规律外还可使用快慢指针的思想,利用指针相遇时判断是否为1循环则可判断是否为快乐数,注意两个指针需先移动再判断,否则可能出现错误
总结:
本题考察对双指针的应用,利用找规律的方法或快慢指针均可做出此题,快慢指针即两个不同速度指针判断是否有循环符合要求则输出答案