问题描述:
Write an algorithm to determine if a number n 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.
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.
Return true if n is a happy number, and false if not.
思路:
求每一位之和比较容易做,这里不赘述。我没有想到检查cycl的方法。答案提示了用hashmap,每次求的和在hashmap中先搜索一遍,如果没有就继续求和,如果有就证明有循环出现,退出循环并返回false
代码比较简单,一遍过:
class Solution {
public boolean isHappy(int n) {
Map<Integer, Integer> map = new HashMap<>();
int sum=n;
while (sum!=1){
if (!map.containsKey(sum)){
map.put(sum,1);
sum=calculate_bit_square(sum);
}
else{
return false;
}
}
return true;
}
public int calculate_bit_square(int x){
int result = 0;
while (x>0){
int remainder = x%10;
result = result + remainder * remainder;
x=x/10;
}
return result;
}
}