File tree Expand file tree Collapse file tree 7 files changed +106
-1
lines changed
Expand file tree Collapse file tree 7 files changed +106
-1
lines changed Original file line number Diff line number Diff line change 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 >
Original file line number Diff line number Diff line change 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" : {
Original file line number Diff line number Diff line change 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 )
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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 ))
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments