zoukankan      html  css  js  c++  java
  • 202. 快乐数

    方法:使用“快慢指针”思想找出循环:“快指针”每次走两步,“慢指针”每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为1引起的循环,是的话就是快乐数,否则不是快乐数。
    注意:此题不建议用集合记录每次的计算结果来判断是否进入循环,因为这个集合可能大到无法存储;另外,也不建议使用递归,同理,如果递归层次较深,会直接导致调用栈崩溃。不要因为这个题目给出的整数是int型而投机取巧。

    为啥一定不会出现死循环,因为int类型最大值为为‭‭2 147 483 647‬‬, 所以平方和最大的数是1 999 999 999,平方和为1 + 81*9 = 724。任何数的平方和都在1到724之间,724次循环之内一定有重复的

    class Solution {
        public boolean isHappy(int n) {
            int slow=n;
            int quick=n;
            do
            {
                slow=pingf(slow);
                quick=pingf(quick);
                quick=pingf(quick);
            }while(slow!=quick);
            return slow==1;
        }
        public int pingf(int n)
        {
            int sum=0;
            while(n>0)
            {
                int b=n%10;
                sum+=b*b;
                n=n/10;
            }
            return sum;
        }
    }
    

      

    作者:linux-man
    链接:https://leetcode-cn.com/problems/happy-number/solution/shi-yong-kuai-man-zhi-zhen-si-xiang-zhao-chu-xun-h/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Faster rcnn代码理解(2)
    Faster rcnn代码理解(1)
    BN讲解(转载)
    faster-rcnn
    编程修养
    人才盘点
    Source Insight 技巧总结
    使用DNSSCrypt解决DNS污染问题
    程序员的自我修养 学习笔记(5)
    闯红灯检测原理
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12963238.html
Copyright © 2011-2022 走看看