Skip to content

Commit 9e1ceba

Browse files
author
王洋
committed
feat: leetcode 202
1 parent f4a6c33 commit 9e1ceba

File tree

7 files changed

+106
-1
lines changed

7 files changed

+106
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<p align="center">
44
<!-- TOPICS COUNT START -->
5-
<img src="https://img.shields.io/badge/-进度:183-green" alt="进度:183">
5+
<img src="https://img.shields.io/badge/-进度:184-green" alt="进度:184">
66
<!-- TOPICS COUNT END -->
77
<a href="./assets/docs/TOPICS.md"><img src="https://img.shields.io/badge/-题库目录-blue" alt="题库目录"></a>
88
<a href="./assets/docs/CATEGORIES.md"><img src="https://img.shields.io/badge/-题库分类-red" alt="题库分类"></a>

assets/data/topics.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,16 @@
899899
"url": "https://leetcode.cn/problems/number-of-1-bits/",
900900
"path": "./problemset/number-of-1-bits/README.md"
901901
},
902+
{
903+
"id": "202",
904+
"title": {
905+
"cn": "快乐数",
906+
"en": "happy-number"
907+
},
908+
"difficulty": "简单",
909+
"url": "https://leetcode.cn/problems/happy-number/description/",
910+
"path": "./problemset/happy-number/README.md"
911+
},
902912
{
903913
"id": "205",
904914
"title": {

assets/docs/TOPICS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@
180180

181181
[191. 位1的个数](../../problemset/number-of-1-bits/README.md)
182182

183+
[202. 快乐数](../../problemset/happy-number/README.md)
184+
183185
[205. 同构字符串](../../problemset/isomorphic-strings/README.md)
184186

185187
[206. 反转链表](../../problemset/reverse-linked-list/README.md)

problemset/happy-number/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# 快乐数
2+
3+
> 难度:简单
4+
>
5+
> https://leetcode.cn/problems/happy-number/description/
6+
7+
## 题目
8+
9+
编写一个算法来判断一个数 n 是不是快乐数。
10+
11+
「快乐数」 定义为:
12+
13+
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
14+
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
15+
- 如果这个过程 结果为 1,那么这个数就是快乐数。
16+
17+
如果 `n` 是 快乐数 就返回 `true` ;不是,则返回 `false`
18+
19+
20+
示例 1:
21+
```
22+
输入:n = 19
23+
输出:true
24+
解释:
25+
12 + 92 = 82
26+
82 + 22 = 68
27+
62 + 82 = 100
28+
12 + 02 + 02 = 1
29+
```
30+
31+
示例 2:
32+
```
33+
输入:n = 2
34+
输出:false
35+
```
36+
37+
提示:
38+
- 1 <= n <= 231 - 1

problemset/happy-number/index.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
def isHappy(n: int) -> bool:
2+
res = n == 1
3+
arr = [n]
4+
while n != 1:
5+
sum = 0
6+
for i in str(n):
7+
sum += int(i) ** 2
8+
if sum in arr:
9+
break
10+
if sum == 1:
11+
res = True
12+
break
13+
n = sum
14+
arr.append(sum)
15+
return res
16+
17+
print(99, isHappy(99))
18+
print(19, isHappy(19))
19+
print(2, isHappy(2))
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { isHappy } from './index'
3+
4+
describe('快乐数', () => {
5+
testCase(isHappy)
6+
})
7+
8+
function testCase(fn: (n: number) => boolean) {
9+
it.each([
10+
// test cases
11+
[19, true],
12+
[2, false],
13+
])('示例%#', (n, expected) => {
14+
expect(fn(n)).toBe(expected)
15+
})
16+
}

problemset/happy-number/index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export function isHappy(n: number): boolean {
2+
let res: boolean = n === 1;
3+
const arr: number[] = [n];
4+
while (n !== 1) {
5+
const sum = n.toString().split('').reduce((s, cur) => {
6+
const curNum = Number(cur);
7+
return s + curNum * curNum;
8+
}, 0);
9+
if (arr.includes(sum)) {
10+
break;
11+
}
12+
if (sum === 1) {
13+
res = true;
14+
break;
15+
}
16+
arr.push(sum);
17+
n = sum;
18+
}
19+
return res;
20+
}

0 commit comments

Comments
 (0)