Shirlies 宁静专注认真的程序媛~

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^2 + 9^2 = 82
• 8^2 + 2^2 = 68
• 6^2 + 8^2 = 100
• 1^2 + 0^2 + 0^2 = 1

https://leetcode.com/problems/happy-number/

 1 #include<vector>
2
3 using std::vector;
4
5 class Solution {
6 private:
7     vector<int> med;
8
9     bool inMed(int n)
10     {
11         vector<int>::iterator beg;
12         for(beg = med.begin(); beg != med.end(); ++ beg)
13         {
14             if(*beg == n)
15             {
16                 return true;
17             }
18         }
19
20         return false;
21     }
22
23     int sum(int n)
24     {
25         int s = 0;
26         while(n != 0)
27         {
28             int modn = n % 10;
29             s += modn * modn;
30             n = n /10;
31         }
32
33         return s;
34     }
35
36 public:
37     bool isHappy(int n)
38     {
39         if(n == 1 || n == 19 || n == 13 || n == 10)
40         {
41             return true;
42         }
43
44         med.clear();
45         med.push_back(n);
46
47         int result = n;
48         bool isLoop = false;
49         while( result != 1)
50         {
51             result = sum(result);
52             if(result != 1 && inMed(result))
53             {
54                 isLoop = true;
55                 break;
56             }
57
58             med.push_back(result);
59         }
60
61         return !isLoop;
62     }
63 };
View Code

posted on 2016-07-11 09:00  Shirlies  阅读(581)  评论(0编辑  收藏  举报