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^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
思路: 用一个集合来存储每次计算的数的各位数字的平方和,在计算的过程中若得出的平方和已经出现在集合中过,那么就说明这个数字不是happy number,若计算的过程中得出的平方和结果为1,那么就说明这个数字是happy number
代码如下:
public class Solution {
public boolean isHappy(int n) {
List<Integer> ls = new ArrayList<Integer>();
if (n == 1)
return true;
int sum = n;
int result = 0;
while (sum != 1) {
int q = sum / 10;
int r = sum % 10;
result = result + r * r;
while (q != 0) {
r = q % 10;
result = result + r * r;
q = q / 10;
}
if (result == 1) {
return true;
} else if (ls.contains(result))
return false;
ls.add(result);
sum = result;
result = 0;
}
return false;
}
}