首页 > 代码库 > A12:快乐数

A12:快乐数

发现快乐数有如下特征:

1、如果一个数“不快乐”,则它计算到后面必然陷入到这个循环里:4, 16, 37, 58, 89, 145, 42, 20, 4, ...

2、对于一个大于243的数字来说,它的下一个数字一定比它小。这是因为一个大于1000的数字,它的下一个数字一定比它小,而对于1000以下最大的数字999,它的下一个数字是243,所以1000以下数字的下一个数字也只可能小于或等于243

 

写一个算法来判断一个数是不是"快乐数"。

一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。

您在真实的面试中是否遇到过这个题?
 
 
样例

19 就是一个快乐数。

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1


 1 public class Solution {
 2     /**
 3      * @param n an integer
 4      * @return true if this is a happy number or false
 5      */
 6     boolean isHappy(int n) {
 7         // Write your code here
 8         int temp = n;
 9         while(true){
10             temp = getNext(temp);
11             if(temp > 243){
12                 continue;
13             }else if(temp == 4 || temp == 16 || temp == 37 || temp == 58 || temp== 89 || temp == 145 || temp ==42|| temp ==20 || temp ==4){
14                 return false;
15             }
16             if(temp == 1){
17                 return true;
18             }
19         }
20     }
21     
22     int getNext(int m){
23         int result = 0;
24         while(m>0){
25             result = result + (m%10) * (m % 10);
26             m = m / 10;
27         }
28         return result;
29     }
30 }

 

A12:快乐数