①思路
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);
}
}
};
③拓展——递归三部曲
后续二叉树相关题目,都是使用递归三部曲。(后面稍微提及一下)
系统学习递归三部曲请看:代码随想录