LeetCode例题讲解:快乐数

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

「快乐数」 定义为:

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

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

示例 1:

输入:n = 19
输出:true
解释:

首先需要将给出的数值进行拆分:
 

bool isHappy(int n) {int r = 0;n = 15646;while(n != 0){int d= n  % 10;n /= 10;  //r += d * d;printf("%d\n",d);}// printf("%d\n",r);return false;
} 

之后开始按照题目对其计算平方和,将代码封装起来

int next_n(int n)
{int r = 0;while(n != 0){int d= n % 10;n /= 10;  r += d * d;printf("%d\n",d);}return r;
}
bool isHappy(int n) 
{n = next_n(n);  printf("%d\n",n);return true;
} 

之后加上条件判断,当该数之前出现过时,则退出循环,未出现过则继续

int next_n(int n)
{int r = 0;while(n != 0){int d= n % 10;n /= 10;  r += d * d;}return r;
}
bool contains(int *history, int size , int n)
{for(int i = 0; i < size ; i++ ){if(history[i] ==n )return true;}return false;}
bool isHappy(int n) 
{int history[10000];int size = 0;while(!contains(history, size , n)){history[size] = n;size++;n = next_n(n);}  return n == 1;
} 

中间添加了一个条件判断,需要判断该数在之前有没有出现过。

实际上history最大只有9*9*10次,即810;

之后简化算法,利用龟兔赛跑,寻找重复数

int next_n(int n)
{int r = 0;while(n != 0){int d= n % 10;n /= 10;  r += d * d;}return r;
}bool isHappy(int n) 
{int slow = n;int fast = n;do{slow = next_n(slow);fast = next_n(fast);fast = next_n(fast);} while(slow != fast);return fast == 1;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681017.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Electron项目中将CommonJS改成使用ES 模块(ESM)语法preload.js加载报错

问题 将Electron项目原CommonJS语法改成使用ES 模块&#xff08;ESM&#xff09;语法&#xff0c;preload.js一直加载不到&#xff0c;报错如下&#xff1a; VM111 renderer_init:2 Unable to load preload script: D:\Vue\wnpm\electron\preload.js VM111 renderer_init:2 E…

地下管线管网三维参数化建模软件MagicPipe3D V3.5

经纬管网建模系统MagicPipe3D&#xff08;www.magic3d.net&#xff09;自主安全可控&#xff0c;本地离线参数化构建三维管网模型&#xff08;管道、接头、附属物等&#xff09;&#xff0c;输出标准3DTiles、Obj等格式&#xff0c;支持Cesium、Unreal、Unity等引擎可视化查询分…

蓝桥杯EDA客观题

目录 前言 一、PCB类知识点和题目分析 1.电阻 2.电容 3.封装类 4.单位转换类 5.电路板结构类 6.PCB绘制规则 7.立创软件 8.PCB硬件 线性电源和开关电源 二、数电知识点和题目分析 1.门电路 2.逻辑代数 3.组合逻辑电路 4.触发器 5.时序逻辑电路 6.其他 三、模…

电表远程抄表方案实施价格是多少?

1.电表远程抄表技术性简述 电表远程抄表&#xff0c;又被称为智能化电表或自动化技术电表载入系统软件&#xff0c;是一种现代化电力工程管理模式。它利用先进的通讯技术和自动化机械&#xff0c;完成对电表数据信息的远程、自动采集&#xff0c;大大提升了电力行业的经营效率…

go mod

常用命令 初始化模块 go mod init 模块名下载 go.mod 文件中指明的所有依赖 go mod download github.com/gin-gonic/ginv1.9.(依赖路径)依赖对其&#xff08;使引用的都是所依赖的&#xff09; go mod tidy编辑go.mod go mod edit go mod edit -require"github.com/g…

虚拟化技术 使用Vsphere Client管理ESXi服务器系统

使用Vsphere Client管理ESXi服务器系统 一、实验目的与要求 1.掌握使用vSphere Client管理ESXi主机 2.掌握将CentOS的安装介质ISO上传到ESXi存储 3.掌握在VMware ESXi中创建虚拟机 4.掌握在所创建的虚拟机中安装CentOS6.5操作系统 5.掌握给CentOS6.5安装VMware Tools 6.掌…

管理学SCI期刊,中科院4区,审稿快易录用,性价比超高!

一、期刊名称 Central European Journal of Operations Research 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;管理学 影响因子&#xff1a;1.7 中科院分区&#xff1a;4区 出版方式&#xff1a;订阅模式/开放出版 版面费&#xff1a;选择开放出版需…

Python - 金三银四心路历程 之 数据结构与算法 刷题

目录 一.引言 二.心路历程 三.刷题经历 四.刷题历程 五.总结 一.引言 <夜深人静写算法> 是 23 年 12 月底博主打算跳槽时开始做刷题准备做的专栏&#xff0c;前后准备了大约一个月&#xff0c;刷题完毕后简单准备了项目和简历后就开始加入找工作大军了&#xff0c;最…

Seata之AT 模式的使用

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Seata 是一款开源的…

【负载均衡式在线OJ项目day1】项目结构

一.功能 查看题目列表&#xff0c;在线编程&#xff0c;判题功能&#xff0c;即leetcode的部分功能 二.宏观结构 整个项目是BS模式&#xff0c;客户端是浏览器&#xff0c;和用户交互并向服务器发起请求。 服务端从功能上来说分为两个模块&#xff0c;第一个是OJServer&…

DI/DO/AI/AO混合分布式BACnet IO控制器助力智慧城市

智慧城市建设浪潮中&#xff0c;钡铼电子的BL207 BACnet边缘计算远程I/O控制器正以其独特的技术优势&#xff0c;成为推动城市智能化转型的关键力量。智慧城市不仅仅是概念上的创新&#xff0c;它需要坚实的技术支撑来实现资源的高效利用、环境的可持续发展以及居民生活的便捷与…

python:鸭子类型使用场景

python&#xff1a;鸭子类型使用场景 1 前言 “一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子&#xff0c;那么这只鸟可以被称为鸭子。“----鸭子模型 鸭子模型是Python中的一种编程哲学&#xff0c;也被称为“鸭子类型”。它来源于一句话&#xff1a;“如果它走起路…