首页 > 其他分享 >leetcode202-快乐数

leetcode202-快乐数

时间:2022-09-03 15:45:40浏览次数:44  
标签:10 return int sum fast while 快乐 leetcode202

https://leetcode.cn/problems/happy-number/

一开始的错误代码

int sum;         if(n==1)    return true;         while(n>9)         {             sum=0;             while(n)             {                 sum += (n%10)*(n%10);                 n /= 10;             }             if(sum==1)  return true;             n=sum;         }         return false; 这里没有考虑到个位数可以不断平方的情况,属于看题不仔细+没有考虑周全。最后404个测试点有几个没通过。 正确做法: 1.循环一定次数(比如100)还没到1的话就不符合题目条件 2.使用集合set记录原始数字和每一次的next,每次循环都先检查是否已经存在,如果已经存在则说明存在循环,不符合题目条件    第二次提交的代码     class Solution { public:     int next(int n)     {         int sum=0;         while(n)         {             sum += (n%10)*(n%10);             n /= 10;         }         return sum;     }     bool isHappy(int n) {         set<int> num;         while(num.find(n)==num.end())         {             num.insert(n);              if(n==1)    return true;              n=next(n);                  }         return false;     } }; 3.快慢指针
//参考英文网站热评第一。这题可以用快慢指针的思想去做,有点类似于检测是否为环形链表那道题
//如果给定的数字最后会一直循环重复,那么快的指针(值)一定会追上慢的指针(值),也就是
//两者一定会相等。如果没有循环重复,那么最后快慢指针也会相等,且都等于1。
class Solution {
    public boolean isHappy(int n) {
        int fast=n;
        int slow=n;
        do{
            slow=squareSum(slow);
            fast=squareSum(fast);
            fast=squareSum(fast);
        }while(slow!=fast);
        if(fast==1)
            return true;
        else return false;
    }
    
    private int squareSum(int m){
        int squaresum=0;
        while(m!=0){
           squaresum+=(m%10)*(m%10);
            m/=10;
        }
        return squaresum;
    }
}
 

标签:10,return,int,sum,fast,while,快乐,leetcode202
From: https://www.cnblogs.com/uacs2024/p/16652780.html

相关文章

  • 202 快乐数
    题目202快乐数编写一个算法来判断一个数n是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这......
  • 啊,我多快乐!
    如果我的家乡是一片大海,我就是一条小鱼,我游啊游,我多快乐!如果我的家乡是一条大路,我就是一辆汽车,我跑啊跑,我多快乐!如果我的家乡是一棵大树,我就是一片树叶,我摇啊摇,我多快乐!......