当前位置: 首页 > news >正文

leetcode刷题日记——快乐数

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 快乐数就是对一个正整数,不断将其替换为它各个位上数字的平方和,如果最终这个过程能够收敛到1,则这个数被称为快乐数。
  • 如果不能收敛到1,则不是快乐数
  • 拿 2 举个例子,2 → 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 →…,最后变成一个无限循环
  • 即是快乐数,则其结果含有1,非快乐数结果无限循环,且结果中不含1,
  • 那么这个问题其实可以转换为判断生成的数据中,是否存在环,且环中值不为1
  • 那么,可以使用快慢指针去判断是否存在环
    在这里插入图片描述
int get_next(int n){int sum=0;while(n!=0){int num=n%10;n/=10;sum+=pow(num,2);}return sum;
}
bool isHappy(int n) {int fast=n;do{fast=get_next(fast);fast=get_next(fast);n=get_next(n);}while(fast!=n);return n==1;
}
  • 根据上面的思想,那么我们可以存取每次运算的结果,如果出现重复的结果,且结果中没有 1,则说明不是快乐数
  • 运行如下
    在这里插入图片描述
int get_next(int n){int sum=0;while(n!=0){int num=n%10;n/=10;sum+=pow(num,2);}return sum;
}bool isHappy(int n) {int len=1;int* nums=(int*)malloc(sizeof(int)*len);nums[0]=n;while(n!=1){n=get_next(n);for(int i=0;i<len;i++){if(nums[i]==n){free(nums);return false;}}nums=(int*)realloc(nums,sizeof(int)*(len+1));nums[len++]=n;}free(nums);return true;
}

[ 官方题解 ]:

  • 方法一:用 hash 检测循环,和上面第二个思路一样
def isHappy(self, n: int) -> bool:def get_next(n):total_sum = 0while n > 0:n, digit = divmod(n, 10)total_sum += digit ** 2return total_sumseen = set()while n != 1 and n not in seen:seen.add(n)n = get_next(n)return n == 1
  • 方法二:快慢指针,同一
  • 方法三:数学,下一个值可能比自己大的最大数字是一定低于 243的,因此任何我循环都必须包含小于 243 的数字,所以可以直接硬编码包含这些数字的散列集,只要达到任何一个小于 243 的数字,我们就知道他是否是快乐数
http://www.xdnf.cn/news/46855.html

相关文章:

  • 【信息安全工程师备考笔记】第一章 网络信息安全概述
  • 【C++】二叉搜索树
  • 线性回归之正则化(regularization)
  • C++入门基础:引用,auto自动关键字,内联函数,范围for循环
  • 【iOS】alloc init new底层原理
  • 代收代付到底是什么?
  • 【英语语法】词法---副词
  • AIGC赋能插画创作:技术解析与代码实战详解
  • 大模型应用案例:主动提问式的 AI 面试官(接入 DeepSeek)
  • 【特殊场景应对3】创意岗简历骚操作:作品集链接的正确打开方式
  • deepseek + kimi制作PPT
  • 01背包简介
  • LeetCode第159题_至多包含两个不同字符的最长子串
  • Kubernetes相关的名词解释-关于组件分类(8)
  • 插叙的作用
  • 【2025软考高级架构师】——计算机系统基础(7)
  • gma 2.1.4 (2025.04.18) | GmaGIS V0.0.1a3 更新日志
  • 【读书笔记·VLSI电路设计方法解密】问题64:什么是芯片的功耗分析
  • JavaWeb 1.HTML+CSS (黑马JavaWeb课程笔记)
  • 交换机端口安全
  • C++学习之游戏服务器开发⑩ZINX的TCP通道实现
  • 基于 Vue3 + ECharts + GeoJson 实现区域地图钻取功能详解
  • 大模型在胆管结石(无胆管炎或胆囊炎)预测及治疗方案制定中的应用研究
  • 【perf】perf工具的使用生成火焰图
  • 自由的控件开发平台:飞帆中使用 css 和 js 库
  • 如何优雅地实现全局唯一?深入理解单例模式
  • uniapp微信小程序实现sse
  • 深度学习优化器详解:SGD、Adam与AdamW
  • C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
  • docker 安装 MySQL