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

算法训练——day16快乐数

202. 快乐数

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

「快乐数」 定义为:

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

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 231 - 1

哈希 

首先想到的就是哈希和双指针嘛,那就先拿哈希试一下。

class Solution {public boolean isHappy(int n) {Set<Integer> hash = new HashSet<>();//只要n不等于1且hash中不存在这个数,就开始循环,否则跳出循环while(n!=1&&!hash.contains(n)){hash.add(n);n=nextNumber(n);}return 1==n;}//首先,对于每个n都要一直循环得到它的下一个数字,/*输入:n = 19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1*///所以,新设置一个函数得到下一个数字public int nextNumber(int n) {int sum = 0;while (n > 0) {int d = n % 10;n = n / 10;sum += d * d;}return sum;}}

 效果一般,用哈希太慢了。

我们发现每次都要得到下一个数字,存在一个递归的行为。

接着看了一下输出的量级也不大,试一下递归。


递归

class Solution {//如果要用递归的话,我们需要把哈希表放在外面//不然每一次递归都在进行初始化哈希表HashSet<Integer> hash = new HashSet<>();public boolean isHappy(int n) {//为1的时候直接返回trueif(1==n){return true;}//哈希中有有这个数的时候就该退出了(说明进入了环)if(hash.contains(n)){return false;}//接下来是递归的操作//直接存进哈希中hash.add(n);int sum=0;while(0!=n){//求和int tmp = n%10;sum+=tmp*tmp;n/=10;}return isHappy(sum);}
}


 双指针

class Solution {//快慢指针//slow每次前进一格,fast每次前进2格//如果成环,则fast总会追上slow,所以跳出循环//如果终点是1,则fast会一直停留在终点直到slow追上//我们在循环中加入判断,当fast到1时,直接返回truepublic boolean isHappy(int n) {int slow = n;int fast=getNext(n);while(fast!=1&&slow!=fast){slow = getNext(slow);fast=getNext(getNext(fast));if(fast==1) return true;}return 1==fast;}public int getNext(int n){int sum=0;while(n>0){int tmp = n%10;sum+=tmp*tmp;n/=10;}return sum;}
}

yeah!完结 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 硬件开篇——体系架构
  • Rust GUI框架Tauri V1 入门
  • 拓扑排序基础
  • 2024 ccpc 网络赛题解
  • Linux标准IO-系统调用详解
  • 产业创新不息,产业运营中心如何成为你的创意孵化器?
  • JAVA字符串操作汇总
  • 门禁系统现场接线图
  • 基于ESP32的管道检修机器人:MQTT协议、SLAM技术栈设计流程
  • 关系数据库设计之Armstrong公理详解
  • PyQt5-QCheckBox-开关按钮
  • 【七篇文章从零速通transformer】01 从零开始解密神经网络:深度学习基础全解析
  • 酒店布草洗涤-酒店分层管理编程实现--———未来之窗行业应用跨平台架构
  • 低代码技术:简化应用开发的未来
  • 基于python+django+vue的医院预约挂号系统
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【mysql】环境安装、服务启动、密码设置
  • 07.Android之多媒体问题
  • 4. 路由到控制器 - Laravel从零开始教程
  • JavaScript-Array类型
  • JAVA并发编程--1.基础概念
  • java正则表式的使用
  • js ES6 求数组的交集,并集,还有差集
  • node学习系列之简单文件上传
  • Odoo domain写法及运用
  • php ci框架整合银盛支付
  • REST架构的思考
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Spring Cloud Feign的两种使用姿势
  • Vue ES6 Jade Scss Webpack Gulp
  • vue中实现单选
  • Web标准制定过程
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 警报:线上事故之CountDownLatch的威力
  • 蓝海存储开关机注意事项总结
  • 小程序01:wepy框架整合iview webapp UI
  • 一个SAP顾问在美国的这些年
  •  一套莫尔斯电报听写、翻译系统
  • 用element的upload组件实现多图片上传和压缩
  • 运行时添加log4j2的appender
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 自动记录MySQL慢查询快照脚本
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 积累各种好的链接
  • ​iOS安全加固方法及实现
  • ​Spring Boot 分片上传文件
  • #、%和$符号在OGNL表达式中经常出现
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)bark-ml
  • (4)Elastix图像配准:3D图像
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (WSI分类)WSI分类文献小综述 2024