- Notifications
You must be signed in to change notification settings - Fork 123
Expand file tree
/
Copy pathHappyNumber202.java
More file actions
Latest commit
71 lines (65 loc) · 1.77 KB
/
Copy pathHappyNumber202.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
*/
publicclassHappyNumber202 {
publicbooleanisHappy(intn) {
if (n <= 0) returnfalse;
Set<Integer> set = newHashSet<>();
set.add(n);
while (true) {
intnext = next(n);
if (next == 1) returntrue;
if (set.contains(next)) returnfalse;
set.add(n);
n = next;
}
}
privateintnext(intn) {
intres = 0;
while (n != 0) {
intt = n % 10;
res += t * t;
n /= 10;
}
returnres;
}
/**
* https://leetcode.com/problems/happy-number/discuss/56917/My-solution-in-C(-O(1)-space-and-no-magic-math-property-involved-)
*/
publicbooleanisHappy2(intn) {
intslow, fast;
slow = fast = n;
do {
slow = digitSquareSum(slow);
fast = digitSquareSum(fast);
fast = digitSquareSum(fast);
} while(slow != fast);
if (slow == 1) returntrue;
elsereturnfalse;
}
privateintdigitSquareSum(intn) {
intsum = 0, tmp;
while (n != 0) {
tmp = n % 10;
sum += tmp * tmp;
n /= 10;
}
returnsum;
}
}