LeetCode 202. Happy Number
happy number的定义:不断的将每一位平方并相加,最后能得到1的数字。
核心思想:如果不是happy number的话,那么这个数会陷入死循环,即每位平方和的结果会和之前的结果重复。略微带点动态规划的思想(?)
1 class Solution { 2 public: 3 bool isHappy(int n) { 4 set<int> processed; 5 while(n != 1 && processed.insert(n).second){ 6 int sum = 0; 7 while(n){ 8 sum += (n % 10) * (n % 10); 9 n = n / 10; 10 } 11 n = sum; 12 } 13 return n == 1; 14 } 15 };
注:set.insert(x)返回的是一个pair,first是一个指向x的迭代器(不论插入前x是否已经在set中),second是bool,如果x已经存在返回false。
另外一种算法:
核心思想是4不是happy number,因此不用维护一个set,当数字循环到1或4时即可判断是否happy。
1 bool isHappy(int n) { 2 int num=0; 3 while(n!=1&&n!=4) 4 { 5 while(n) 6 { 7 num += (n%10) * (n%10); 8 n/=10; 9 } 10 n=num;num=0; 11 } 12 return 1==n; 13 }
两种算法时间相同。