快乐数
利用哈希表
不停循环计算每位数字的sum。当sum等于1的时候返回成功。
每一次的sum都存入哈希表中,当某一个sum第二次出现,为进入死循环。
因此发现sum在哈希表里第二次出现,返回失败。
#include <iostream> #include<string> #include<vector> #include<set> #include <unordered_set> using namespace std; class Solution { public: bool isHappy(int n) { unordered_set<int> sum_set; int sum = 0; while (1) { if (n < 10) sum = n * n; else { while (n>=10) { sum = sum + (n % 10) * (n % 10); n = n / 10; } sum = sum + n * n; } if (sum == 1) return true; if (sum_set.find(sum) != sum_set.end()) return false; sum_set.insert(sum); cout << sum << endl; n = sum; sum = 0; } } }; int main() { Solution a; int n = 19; cout<< a.isHappy(n)<<endl; return 0; }
二刷
class Solution { public: bool isHappy(int n) { string num_s; int sum=0; vector<int> tmp; while( find(tmp.begin() , tmp.end(),n) == tmp.end()) { cout<<n<<endl; tmp.push_back(n); num_s = to_string(n); for(int i=0 ; i<num_s.size();i++) { sum += pow( (int)(num_s[i]-'0'),2 ); } if(sum == 1 ) return true; else { n = sum; sum=0; } } return false; } };