码迷,mamicode.com
首页 > 移动开发 > 详细

LeetCode T202.Happy Number/寻找快乐数

时间:2020-04-30 09:17:14      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:mic   思路   image   两种   数字   fast   ber   while   元素   

技术图片

对题目进行分析可以知道对一个数字进行isHappy判断其可能有两种情况,一个使收敛到1另一个是在一组数中陷入循环。因此我们就通过快慢指针,让慢指针一次移动一位,快指针一次移动两位,若是环形结构则两者必然在某一时刻会相遇,若收敛,快指针一定先一步收敛到1,至于发散的可能性,受制于进制和位数,在试过几个大数后就可以知道这不可能发散,只存在上面的两种可能。

看了下官方的题解,官方给了三种思路,一种是利用HashSet存储出现过的元素,来判断环形结构;另一种就是上述的快慢指针;第三种就是数学技巧,需要找规律来进行求解。

我的题解代码如下,leetcode上运行时间0ms,内存占用5.2MB

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

bool isHappy(int n){
    int slowptr,fastptr;
    slowptr=n;
    fastptr=getNext(n);
    while(fastptr!=1 && fastptr!=slowptr){
        slowptr=getNext(slowptr);
        fastptr=getNext(getNext(fastptr));
    }
    return fastptr==1;
}

 

LeetCode T202.Happy Number/寻找快乐数

标签:mic   思路   image   两种   数字   fast   ber   while   元素   

原文地址:https://www.cnblogs.com/runsdeep/p/12806528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!