標籤:
題目:
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 };View Code
代碼中的isHappy()方法的最開頭我是隨便加了幾個判斷,哈哈,題目中給出的快樂數應該會在背景測試資料中。
leetcode-【簡單題】Happy Number