题目:
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/
答案:
暴力解决,直接给每个数的每位计算平方和就行,然后把中间的数都记录下来,如果下次出现这个数,就是loop了。
代码:
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 };
代码中的isHappy()方法的最开头我是随便加了几个判断,哈哈,题目中给出的快乐数应该会在后台的测试数据中。