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. 快乐数的主要内容,如果未能解决你的问题,请参考以下文章