【图解算法】- 快乐数还能这么解?

 一 - 前言

介绍:大家好啊,我是hitzaki辰。

社区:(完全免费、欢迎加入)日常打卡、学习交流、资源共享的知识星球。

自媒体:我会在b站/抖音更新视频讲解 或 一些纯技术外的分享,账号同名:hitzaki辰。

正文开始,抓紧上车!


二 - 题干讲解

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

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

  • 如果这个过程 结果为 1,那么这个数就是快乐数。

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

力扣原题:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

1 - 快乐数的迭代不会无限变大

1)举例1:8迭代后变为64,变大了

2)举例2:三位数的最大值999,迭代后为243

即快乐数不会无限变大。

2 - 总结

快乐数的迭代进行到最后只有两种情况:

(1)终止:变成1,比如68->100->1

(2)无限循环:迭代到最后,重新成为迭代链路前面的点,即形成环路

3 - 经典解法

使用一个Set存储出现过的数字,若迭代过程中重复出现了一个数字,则意味着出现了环路

三 - 双指针法,将迭代链路视为一个链表

1 - 如何判断一个链路有环

一个环形链表,使用指针p1和p2,p1每次迭代两个,p2每次迭代1个,如果有环,则p1、p2一定相遇。

如图,p1和p2指针下一次迭代一定会在结点x相遇。

2 - 快乐数的代码实现

根据上述的理论基础,我们可以同时对p1和p2进行快乐数迭代,

通过判断结果为1或者p1、p2是否相等,来决定这个数是否为快乐数。

class Solution {public boolean isHappy(int n) {int fast = happy(n), slow = n;while(fast!=1){if(fast == slow) return false;fast = happy(fast);fast = happy(fast);slow = happy(slow);}return true;}private int happy(int n){int result = 0;while(n!=0){int bit = n % 10;result += bit * bit;n = n / 10;}return result;}
}

四 - 结尾

感谢你看到这里,如果感觉内容不错的话请点赞支持一下!

如果小伙伴对我的讲解有疑问,欢迎评论区讨论。

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

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

相关文章

golang学习笔记——接口interfaces

文章目录 Go 语言接口例子空接口空接口的定义空接口的应用空接口作为函数的参数空接口作为map的值 类型断言接口值 类型断言例子001类型断言例子002类型断言例子003巩固练习 Go 语言接口 接口(interface)定义了一个对象的行为规范,只定义规范…

qt-C++笔记之两个窗口ui的交互

qt-C笔记之两个窗口ui的交互 code review! 文章目录 qt-C笔记之两个窗口ui的交互0.运行1.文件结构2.先创建widget项目,搞一个窗口ui出来3.项目添加第二个widget窗口出来4.补充代码4.1.qt_widget_interaction.pro4.2.main.cpp4.3.widget.h4.4.widget.cpp4.5.second…

免费稳定几乎无门槛,我的ChartGPT助手免费分享给你

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 概述 ChatGPT想必大家应该都不陌生了,大部分人或多或少都接触了,好多应该都是通过openAi的官方进行使用的,这个门槛对大部分人有点高,…

shell脚本学习笔记07

如何让shell实现 可选择性执行 的功能 用了while进行循环,是死循环,在循环时,使用case进行使用哪个脚本进行执行。使用clear进行每一次操作前的清屏,eof代表输入这个会显示目录。read用来读取输入的值,如果不输入值不会…

【教学类-06-06】20231118 (55格版)X以内加法、减法、加减混合题

背景需求 1、长期做手工制作,常规管理难以控制 优势: 1、幼儿创作热情高涨,发明的新玩具多 2、互助观摩,进一步模仿、创作作品 3、互动游戏兴趣浓厚,语言交流踊跃, 劣势: 1、纸条碎片多&…

ARM CoreLink CCN 互连总线介绍

NIC NOC CCI CMN CNN NI cmn-700 nic-700 ni-700 MLGB这都是啥玩意? 后期博文或视频将会更新这一系列。今天先温习一下CNN的概念,这是来自2014年的文章,然后稍微整理总结一番。 以下是正文… 现代主流和优质 ARM 片上系统 (SoC) 产品使用 CoreLink 缓存一致性网络 (CCN) 504…

ClientDateSet:Cannot perform this operation on a closed dataset

一、问题表现 Delphi 三层DataSnap,使用AlphaControls控件优化界面,一窗口编辑时,出现下列错误提示: 编译通过,该窗口中,重新显示数据,下图: 相关代码: procedure…

Django自动生成docs接口文档

1.创建Django项目 python manage.py startproject django20252.创建子应用 python manage.py startapp api3.安装依赖包 pip install coreapi4.创建urls.py from django.contrib import admin from django.urls import path, include from rest_framework import routers f…

数学建模值TOPSIS法及代码

TOPSIS法 TOPSIS法简称为优劣距离解法,是一种常见法综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各个评价方案之间的差距。 模型介绍 上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多,太多的…

PPT基础:合并形状

目录 合并形状功能详解合并形状使用文字转形状图表转形状 合并形状功能详解 形状:并不局限于ppt内给定的图形,也并不全是图形 (1)所在位置:选中图形后>>>形状格式>>>最左边 (2&#x…

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook: defineProperty var people {age: 19, }; var count20; console.log(people.age) // 参数:对象 属性名字 函数 Object.defineProperty(people, age, {get: function () {console.log(获取值!);return count;},// set: …

通信原理板块——纠错编码最小码距与纠错能力的计算

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 对纠错编码的最小码距d0与编码的检…