Skip to content

Commit 68f8b47

Browse files
authored
Merge pull request doocs#147 from Wushiyii/mysolu-leetcode
Add solution of 202.Happy Number(java)
2 parents 40d8fac + c257aeb commit 68f8b47

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

solution/0202.Happy Number/README.md

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
## 快乐数
2+
### 题目描述
3+
4+
编写一个算法来判断一个数是不是“快乐数”。
5+
6+
一个“快乐数”定义为:
7+
8+
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
9+
10+
示例:
11+
```
12+
输入: 19
13+
输出: true
14+
解释:
15+
1² + 9² = 82
16+
8² + 2² = 68
17+
6² + 8² = 100
18+
1² + 0² + 0² = 1
19+
```
20+
21+
### 解法
22+
在进行验算的过程中,发现一个规律,只要过程中得到任意一个结果和为4,那么就一定会按 `4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4`
23+
进行循环,这样的数就不为快乐数;此外,结果和与若是与输入n或者上一轮结果和n相同,那也不为快乐数.
24+
25+
```java
26+
class Solution {
27+
public boolean isHappy(int n) {
28+
if (n <= 0) return false;
29+
int sum = 0;
30+
while (sum != n) {
31+
while (n > 0) {
32+
sum += Math.pow(n % 10 ,2);
33+
n /= 10;
34+
}
35+
if (sum == 1) {
36+
return true;
37+
} else if (sum == 4) {
38+
return false;
39+
} else {
40+
n = sum;
41+
sum = 0;
42+
}
43+
}
44+
return false;
45+
}
46+
}
47+
48+
// 递归
49+
public boolean isHappy(int n) {
50+
if (n <= 0) return false;
51+
int sum = 0;
52+
while (n > 0) {
53+
sum += Math.pow(n % 10 ,2);
54+
n /= 10;
55+
}
56+
if (sum == 1) {
57+
return true;
58+
} else if (sum == 4) {
59+
return false;
60+
} else {
61+
return isHappy(sum);
62+
}
63+
}
64+
```
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
2+
class Solution {
3+
public boolean isHappy(int n) {
4+
if (n <= 0) return false;
5+
int sum = 0;
6+
while (sum != n) {
7+
while (n > 0) {
8+
sum += Math.pow(n % 10, 2);
9+
n /= 10;
10+
}
11+
if (sum == 1) {
12+
return true;
13+
} else if (sum == 4) {
14+
return false;
15+
} else {
16+
n = sum;
17+
sum = 0;
18+
}
19+
}
20+
return false;
21+
}
22+
23+
// 递归
24+
public boolean isHappy2(int n) {
25+
if (n <= 0) return false;
26+
int sum = 0;
27+
while (n > 0) {
28+
sum += Math.pow(n % 10, 2);
29+
n /= 10;
30+
}
31+
if (sum == 1) {
32+
return true;
33+
} else if (sum == 4) {
34+
return false;
35+
} else {
36+
return isHappy2(sum);
37+
}
38+
}
39+
}

0 commit comments

Comments
 (0)