-
Notifications
You must be signed in to change notification settings - Fork 117
Expand file tree
/
Copy pathHappyNumber202.java
More file actions
71 lines (65 loc) · 1.77 KB
/
HappyNumber202.java
File metadata and controls
71 lines (65 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
* 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:
*
* Input: 19
* Output: true
* Explanation:
* 12 + 92 = 82
* 82 + 22 = 68
* 62 + 82 = 100
* 12 + 02 + 02 = 1
*/
public class HappyNumber202 {
public boolean isHappy(int n) {
if (n <= 0) return false;
Set<Integer> set = new HashSet<>();
set.add(n);
while (true) {
int next = next(n);
if (next == 1) return true;
if (set.contains(next)) return false;
set.add(n);
n = next;
}
}
private int next(int n) {
int res = 0;
while (n != 0) {
int t = n % 10;
res += t * t;
n /= 10;
}
return res;
}
/**
* https://leetcode.com/problems/happy-number/discuss/56917/My-solution-in-C(-O(1)-space-and-no-magic-math-property-involved-)
*/
public boolean isHappy2(int n) {
int slow, fast;
slow = fast = n;
do {
slow = digitSquareSum(slow);
fast = digitSquareSum(fast);
fast = digitSquareSum(fast);
} while(slow != fast);
if (slow == 1) return true;
else return false;
}
private int digitSquareSum(int n) {
int sum = 0, tmp;
while (n != 0) {
tmp = n % 10;
sum += tmp * tmp;
n /= 10;
}
return sum;
}
}