快乐数(哈希+递归算法+代码实现+拓展递归三部曲)

题目1

在这里插入图片描述

①思路

1.为什么使用递归

从本题的工作逻辑上来看,得出三数之和,如果不满足条件就一直循环使用得到的三数之和。

一直使用自己得到的数据,就是一个递推的特征(本题递推迭代也行)

2.为什么使用哈希法

因为递归得到的答案可能重复,重复就会一直无限递归。所以需要类似于记忆化搜索一样,创建一个哈希表用于记录得到过的三数之和。以免重复

哈希法:为了防止陷入无限递归

②代码实现

class Solution {
public:
	unordered_set<int>Get;
	
	int getSum(int n){//得到平方和 
		int ret = 0;
		while(n){
			ret+=(n%10)*(n%10);
			n/=10;
		}
		return ret;
	}
	
	//易得递归算法
	//三部曲
	//1、返回值+参数 
    bool isHappy(int n)
    {
    	//2、终止条件 
    	if(Get.find(n)!=Get.end()){//找到重复出现,不终止会陷入无限循环 
    		return false;
		}
	
		//3、单层循环逻辑
		//找到快乐数,结束
		//没找到快乐数,进行下一层递归(下一层递归决定结果)
		int get = getSum(n);
		if(get==1)return true;
		else{
			Get.insert(n);
			return isHappy(get);
		}
        
    }
};

③拓展——递归三部曲

后续二叉树相关题目,都是使用递归三部曲。(后面稍微提及一下)

系统学习递归三部曲请看:代码随想录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值