每日一题## leetcode202—快乐数编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。- 然后重复这个过程直到这个数变为 1,也可能是 无限循环但始终变不到 1。- 如果这个过程 **结果为** 1,那么这个数就是快乐数。如果 `n` 是 *快乐数* 就返回 `true` ;不是,则返回 `false` 。示例 1:输入:n = 19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1示例 2:输入:n = 2输出:false解法一:快慢指针对于有环的数,定义快慢指针,快指针走两步,慢指针走一步,在环中一定会相遇,最后比较相遇的数是不是1即可时间复杂度:O(n)空间复杂度:O(1)class Solution {public: int square(int num) { int sum = 0; while(num) { int tmp = num % 10; sum += tmp * tmp; num /= 10; } return sum; } bool isHappy(int n) { int fast = square(n), slow = n; while(fast != slow) { fast = square(square(fast)); slow = square(slow); } return fast == 1; }};欢迎补充其他解法
