LeetCode 202. Happy Number

happy number的定义:不断的将每一位平方并相加,最后能得到1的数字。

核心思想:如果不是happy number的话,那么这个数会陷入死循环,即每位平方和的结果会和之前的结果重复。略微带点动态规划的思想(?)

 1 class Solution {
 2 public:
 3     bool isHappy(int n) {
 4         set<int> processed;
 5         while(n != 1 && processed.insert(n).second){
 6             int sum = 0;
 7             while(n){
 8                 sum += (n % 10) * (n % 10);
 9                 n = n / 10;
10             }
11             n = sum;
12         }
13         return n == 1;
14     }
15 };

注:set.insert(x)返回的是一个pair,first是一个指向x的迭代器(不论插入前x是否已经在set中),second是bool,如果x已经存在返回false。

 

另外一种算法:

核心思想是4不是happy number,因此不用维护一个set,当数字循环到1或4时即可判断是否happy。

 1 bool isHappy(int n) {
 2         int num=0;
 3         while(n!=1&&n!=4)
 4         {
 5             while(n)
 6             {
 7                 num += (n%10) * (n%10);
 8                 n/=10;
 9             }
10             n=num;num=0;
11         }
12         return 1==n;
13     }

两种算法时间相同。

posted @ 2016-03-16 20:42  co0oder  阅读(143)  评论(0编辑  收藏  举报