Yujie

LeetCode 快乐数

题目描述

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

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

示例:

输入: 19
输出: true

解释:

12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

解题思路

方法一:龟兔赛跑(C语言 O(1)

int nextNumber(int n){
	int res=0;
	while(n!=0){
		res+=(n%10)*(n%10);//求平方和
		n/=10;
	}
	return res;
}

bool isHappy(int n){
    //快慢指针在同一起点
	int slow=n;//慢指针(乌龟)
	int fast=n;//快指针(兔子)
	do{
		slow=nextNumber(slow);//慢指针走 1 步
		fast=nextNumber(nextNumber(fast));//快指针走 2 步
	}while(slow!=fast);
	return fast==1; 
}