zoukankan      html  css  js  c++  java
  • LeetCode T202.Happy Number/寻找快乐数

    对题目进行分析可以知道对一个数字进行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;
    }
  • 相关阅读:
    (转)C# BackgroundWorker组件的原理分析
    (转)App.Config详解及读写操作
    (转)C# 控制蜂鸣器发声
    存储过程小例子
    DB通用类:MySQL通用类
    poj 1936 All in All
    Bone Collector 01背包问题
    sdut1359 求最大和子矩阵
    求最大值
    后缀式求值
  • 原文地址:https://www.cnblogs.com/runsdeep/p/12806528.html
Copyright © 2011-2022 走看看