202. Happy Number
哈希表:用set来判断快乐数
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.
Example 1:
Input: n = 19
Output: true
Explanation:
1
2
1^2
12 +
9
2
9^2
92 = 82
8
2
8^2
82 +
2
2
2^2
22 = 68
6
2
6^2
62 +
8
2
8^2
82 = 100
1
2
1^2
12 +
0
2
0^2
02 +
0
2
0^2
02 = 1
Example 2:
Input: n = 2
Output: false
Constraints:
1 <= n <= 231 - 1
逻辑分析:
有两个点需要解决:
1.怎么获取每个值的所有位置上的数字
对10取模,再将原数除以10,不断循环
2.怎么记录是否进入死循环
用set存储结果值
JAVA代码实现:
class Solution {
public boolean isHappy(int num) {
HashSet<Integer> hashSet = new HashSet<>();
int sum =0;
int tempSum = digitSum(num);
while(!hashSet.contains(tempSum)){
hashSet.add(tempSum);
if(tempSum==1){
return true;
}
tempSum = digitSum(tempSum);
}
return false;
}
public int digitSum(Integer num){
int tempSum = 0;
while(num!=0){
int digit = num%10;
num=num/10;
tempSum+=digit*digit;
}
return tempSum;
}
}