编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」 定义为:
-
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
-
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
-
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n
是 快乐数 就返回 true
;不是,则返回 false
示例 1:
输入:n = 19 输出:true 解释: 12 + 92 = 82(2是平方) 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
示例 2:
输入:n = 2 输出:false
// 比如是 2 2->4->16->37->58->89->145->42->20->4 这是一个非快乐数 可以看到这是一个循环 //是19的话 19->82->68->100->1->1->1..... //所以说快乐数和非快乐数就是一个是循环一直循环一个是可以得到1 然后在1中一直循环 //所以我们用到快慢指针 如果说快慢指针相遇了是一的话就是快乐数 class Solution { public: int ProductSum(int n){ int sum = 0; while(n){ int bit = n%10; sum += bit*bit; n = n/10; } return sum; } bool isHappy(int n) { int slow = n,fast = n; do{ slow = ProductSum(slow); fast = ProductSum(fast); fast = ProductSum(fast); }while(slow != fast); return slow == 1; } };