202. 快乐数

Posted 易小顺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了202. 快乐数相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

  编写一个算法来判断一个数 n 是不是快乐数。



说明

一、题目

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果 可以变为 1,那么这个数就是快乐数。
  • 如果 n 是快乐数就返回 true ;不是,则返回 false 。

二、分析

  • 首先观察题目的第一个任务条件,下个数为当前数的各个位平方之和,这样我们就有递归条件了。
  • 但是这个过程有可能是无限循环的,用递归就可能找不到出口,直到堆栈溢出。
  • 存在循环也就是说我们可以用快慢指针来判断,而最终结果的判断就只需要判断快指针是否 == 1 即可,如果快指针都不是 1 的话,慢指针也不会是。
class Solution {
    public boolean isHappy(int n) {
        int fast = n;
        int slow = n;
        do{
            slow = happy(slow);
            fast = happy(fast);
            fast = happy(fast);
        } while(fast != 1 && fast != slow);
        return fast == 1;
    }

    public int happy(int n) {
        int num = 0;
        while(n > 0) {
            num += (n % 10) * (n % 10);
            n /= 10;
        }
        return num;
    }
}

总结

熟悉环的结构特性和循环的退出条件。

以上是关于202. 快乐数的主要内容,如果未能解决你的问题,请参考以下文章

202. 快乐数

leetcode202 快乐数(Easy 不简单)

202. 快乐数

202.快乐数

LeetCode No.202 快乐数

202. 快乐数