leetcode:202. 快乐数

题目来源

题目描述

在这里插入图片描述

题目解析

模拟

class Solution {
public:
    bool isHappy(int n) {
        std::set<int> set;
        set.insert(n);
        while (n != 1){
            int sum = 0;
            while (n != 0){  // 2
                sum += std::pow(n % 10, 2);  // ans = 4
                n = n / 10;  // 0
            }
            if(set.count(sum)){
                return false;
            }
            set.insert(sum);
            n = sum;
        }
        return true;
    }
};

快慢指针

在这里插入图片描述


怎么检测环呢?快慢指针

class Solution {
    int getNext(int n){
        int sum = 0;
        while(n > 0)
        {
            int bit = n % 10;
            sum += bit * bit;
            n = n / 10;
        }
        return sum;


    }

public:
    bool isHappy(int n) {
        int  slow = n, fast = n;
        do {
            slow = getNext(slow);
            fast = getNext(getNext(fast));
        }while (fast != slow);
        return fast == 1;
    }
};

类似题目

题目 思路
leetcode:258. 各位相加 Add Digits 模拟、找规律
leetcode:202. n是不是快乐数 Happy Number 检测环
leetcode:263. n是不是丑数Ugly Number
leetcode:141. 判断链表中有没有环 Linked List Cycle

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...