LeetCode OJ:Happy Number(欢乐数)
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 + 81 = 82
- 64 + 4 = 68
- 36 + 64 = 100
- 1 + 0 + 0 = 1
欢乐数,就是不断将位的平方相加为新数,看看最后得到的数是不是1,是的话就是欢乐数,否则不是。代码比较简单,用一个set保存下来已经求到过的不是1的数字,一旦
后期某个计算到的数字能在set中找到(不是1),那么就一定进入到死循环当中了。这是就应该返回false, 否则一旦某个计算结果是1那么久返回true,代码见下:
1 class Solution { 2 public: 3 bool isHappy(int n) { 4 set<int> sample; 5 sample.insert(n); 6 int s = 0; 7 for(;;){ 8 while(n != 0){ 9 s += (n % 10) * (n % 10); 10 n /= 10; 11 } 12 if(s == 1) 13 return true; 14 else{ 15 if(sample.find(s) != sample.end()) 16 return false; 17 sample.insert(s); 18 n = s; 19 s = 0; 20 } 21 } 22 } 23 };
java版本如下所示,方法相同:
1 public class Solution { 2 public boolean isHappy(int n) { 3 HashSet<Integer> set = new HashSet<Integer>(); 4 do{ 5 if(set.contains(n)) 6 return false; 7 set.add(n); 8 int tmp = 0; 9 while(n != 0){ 10 tmp += (n%10)*(n%10); 11 n/=10; 12 } 13 n = tmp; 14 }while(n!=1); 15 return true; 16 } 17 }