LeetCode OJ:Happy Number(欢乐数)

Write an algorithm to determine if a number is "happy".

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

Example: 19 is a happy number

  • 1 + 81 = 82
  • 64 + 4 = 68
  • 36 + 64 = 100
  • 1 + 0 + 0 = 1

欢乐数,就是不断将位的平方相加为新数,看看最后得到的数是不是1,是的话就是欢乐数,否则不是。代码比较简单,用一个set保存下来已经求到过的不是1的数字,一旦

后期某个计算到的数字能在set中找到(不是1),那么就一定进入到死循环当中了。这是就应该返回false, 否则一旦某个计算结果是1那么久返回true,代码见下:

 1 class Solution {
 2 public:
 3     bool isHappy(int n) {
 4         set<int> sample;
 5         sample.insert(n);
 6         int s = 0;
 7         for(;;){
 8             while(n != 0){
 9                 s += (n % 10) * (n % 10);
10                 n /= 10;
11             }
12             if(s == 1)
13                 return true;
14             else{
15                 if(sample.find(s) != sample.end())
16                     return false;
17                 sample.insert(s);
18                 n = s;
19                 s = 0;
20             }
21         }
22     }
23 };

 java版本如下所示,方法相同:

 1 public class Solution {
 2     public boolean isHappy(int n) {
 3         HashSet<Integer> set = new HashSet<Integer>();
 4         do{
 5             if(set.contains(n))
 6                 return false;
 7             set.add(n);
 8             int tmp = 0;
 9             while(n != 0){
10                 tmp += (n%10)*(n%10);
11                 n/=10;
12             }
13             n = tmp;
14         }while(n!=1);
15         return true;
16     }
17 }

 

posted @ 2015-10-07 17:02  eversliver  阅读(491)  评论(0编辑  收藏  举报