leetcode 202 快乐数

虽然是一道简单题,但是简单的基础是对这个数学问题有足够的认识,最重要的就是要知道,不论多大的数,最终都会回到243以下,因为最大的三位数99经过一次操作后便是243,而更大的数操作后数位会不断减少,最后回到243以下。知道这一点是比较关键的,因为可以把所有数分为两类,一类是可以到达1的,一类是处于死循环中的,所以说,是否存在死循环就是判断是否是快乐树的标准之一。在链表之中查找是否有死循环可以通过快慢指针的方法去做,该题目也一样。当然设定一个哈希表,把所有遇到的数存入表中,若在计算中出现重复的数,则代表出现循环,则结束,这样的方法也是可以的,本质上是类似的。贴代码

 1 class Solution {
 2 public:
 3     int NextNode(int n)
 4     {
 5         int num = 0;
 6         while(n>0)
 7         {
 8             int d = n%10;
 9             n = n/10;
10             num += d*d;
11         }
12         return num;
13     }
14     bool isHappy(int n) 
15     {
16         int fn = NextNode(n);
17         int sn = n;
18         while(fn != 1 && fn!=sn)
19         {
20             fn = NextNode(NextNode(fn));
21             sn = NextNode(sn);
22         }
23         return fn == 1;
24     }
25 };

 

上一篇:去哪儿网数据预处理与分析


下一篇:php利用smtp类轻松的发送电子邮件