已解答
简单
相关标签
相关企业
编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」 定义为:
-
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
-
然后重复这个过程直到这个数变为 1,也可能是 无限循环!!! 但始终变不到 1。
-
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n
是 快乐数 就返回 true
;不是,则返回 false
。
示例 1:
输入:n = 19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
示例 2:
输入:n = 2 输出:false
提示:
-
1 <= n <= 231 - 1
-
bool isHappy(int n) { int B(int num) { int sum = 0; while (num != 0) { sum += (num% 10) * (num % 10); num /= 10; } return sum; } int slow, fast; slow = fast = n; while(1) { slow = B(slow);//慢指针走一步 fast = B(B(fast));//快指针走两步 if(slow==fast) break; }//无论是否为快乐数,他都会跳出循环, 1**无限循环!!!,构成环形,快慢指针定会相遇 但始终变不到 1;2。**结果为** 1,那么这个数就是快乐数。 return slow == 1;若slow不为1,返回false,若为1,返回true }
注意:这个题非常有技巧性,可以用快慢指针的方法思考以下
快慢指针:比较适用于有循环的题,像判断是否为环形链表等,这个题也可。
1无限循环!!!,构成环形,快慢指针定会相遇 但始终变不到 1;
2结果为 1,那么这个数就是快乐数**
做不出这道快乐数,我想大概不会快乐,快来试试吧!
~~虽然我走得很慢,但绝不停止前行的脚步!加油!