题目:
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
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
解题思路:
不是快乐数的话,会出现循环:
用一个set来记录出现过的数字,每新生成一个数字,如果之前没有出现过,就添加到set中,如果出现过,就跳出循环,并判断该数是否是“1”,是“1”的话,就是开心数,否则不是
代码:
class Solution {
public boolean isHappy(int n) {
//开心数
if(n<1)
return false;
Set<Integer> set = new HashSet<>();
int temp;
int newN;
//n不为1,且set中不包含之前出现过的数,否则会变成死循环
while(n!=1 && !set.contains(n)){
set.add(n);
//产生新的n--->newN
newN = 0;
while(n>0){
temp = (n%10) ;
n/=10;
newN+=(temp*temp);
}
n = newN;
}
return n==1;
}
}