leetcode_rust/
happy_number.rs1#![allow(dead_code)]
2
3pub fn is_happy(n: i32) -> bool {
4 use std::collections::HashSet;
5 let mut set = HashSet::new();
6 let mut n = n;
7 loop {
8 let mut sum = 0;
9 while n != 0 {
10 let temp = n % 10;
11 n /= 10;
12 sum += temp * temp;
13 }
14 if sum == 1 {
15 return true;
16 }
17 if !set.insert(sum) {
18 return false;
19 }
20 n = sum;
21 }
22}
23
24pub fn is_happy2(n: i32) -> bool {
25 let mut n = n;
26 loop {
27 let mut sum = 0;
28 while n != 0 {
29 let temp = n % 10;
30 n /= 10;
31 sum += temp * temp;
32 }
33 if sum == 1 {
34 return true;
35 }
36 if sum == 4 {
37 return false;
38 }
39 n = sum;
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test1() {
49 assert_eq!(is_happy(19), true);
50 assert_eq!(is_happy(14), false);
51 }
52
53 #[test]
54 fn test2() {
55 assert_eq!(is_happy2(19), true);
56 assert_eq!(is_happy2(14), false);
57 }
58}