题目:编写一个算法来判断一个数n是不是快乐数
来源:网友分享的面试算法题
【快乐数定义】
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为1,也可能是 无限循环,但始终变不到1。
如果可以变为1,那么这个数就是快乐数。
如果n是快乐数就返回true;不是,则返回false.
示例1
输入:n=19
输出:ture
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例2
输入:n=2
输出:false
循环写法
/**
* 是否是快乐数(循环写法)
*
* @param number 需要验证的正整数
* @return 返回是否是快乐数
*/
public static boolean isHappyMethod1(int number) {
boolean isHappyNumber = false;
while (true) {
int sum = 0;
int tempNumber = number;
while (tempNumber != 0) {
int a = tempNumber % 10;
sum = sum + a * a;
System.out.print(a + "2 ");
tempNumber = tempNumber / 10;
}
System.out.println(" = " + sum);
if (sum == 1) {
isHappyNumber = true;
break;
} else if (sum == 4) {
//当为4的时候,会进入死循环
break;
} else {
number = sum;
}
}
return isHappyNumber;
}
递归写法
/**
* 是否是快乐数(递归写法)
*
* @param number 需要验证的正整数
* @return 返回是否是快乐数
*/
public static boolean isHappyMethod2(int number) {
if (number == 4) {
return false;
}
int sum = 0;
while (number != 0) {
int a = number % 10;
sum = sum + a * a;
System.out.print(a + "2 ");
number = number / 10;
}
System.out.println(" = " + sum);
if (sum == 1) {
return true;
} else {
return isHappyMethod2(sum);
}
}
提示:
如果一个数不是快乐数,经过有限次循环之后,必定会进入一个死循环,且这个死循环都是从
4——>16——>37——>58——>89——>145——>42——>20——>4
原文:https://www.cnblogs.com/yanchuanbin/p/14823780.html