- 编写一个算法来判断一个数是不是“快乐数”。一个”快乐数“的定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程,直到这个数变成1,也可能是无限循环但始终变不到1.如果可以变为1,那么这个数就是快乐数。
解法1:
package www.bittech;
import java.util.HashSet;
import java.util.Set;
public class Solution {
public boolean isHappy(int n){
Set<Integer>set = new HashSet<>();
while(n!=1){
int flag = getNext(n);
if(set.contains(flag)){
return false;
}else{
set.add(flag);
n = flag;
}
}
return true;
}
public int getNext(int num){
int result = 0;
result = result+(num%10)*(num%10);
num = num/10;
if(num == 0){
return result;
}else{
return result+getNext(num);
}
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.isHappy(20));
}
}
解法2:
package www.bittech;
public class Solution {
public boolean isHappy(int n){
while(true){
int flag = getNext(n);
if(flag == 1){
return true;
}else{
n = flag;
if(n == 89){
return false;
}
}
}
}
public int getNext(int num){
int result = 0;
result = result+(num%10)*(num%10);
num = num/10;
if(num == 0){
return result;
}else{
return result+getNext(num);
}
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.isHappy(21));
}
}