leetcode_rust/
happy_number.rs

1#![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}