leetcode 202.快乐数

代码:

class Solution {//计算 n 每个位置上的数字的平方和public int quadraticSum(int n){int sum=0;while (n>0){int i=n%10;sum+=i*i;n/=10;}return sum;}public boolean isHappy(int n) {//慢指针int slow=n;//快指针int fast=quadraticSum(n);while (slow!=fast){slow=quadraticSum(slow);fast=quadraticSum(quadraticSum(fast));}return slow==1;}
}

题解:

        通过题意我们可以知道,要分为两种情况来进行讨论

        1.重复上述过程,最终得到的数字变为 1

        2.重复上述过程,无限循环,始终变不到 1 

        示例 1 的变化过程为:19 -> 82 -> 68 -> 100 -> 1 -> 1 -> 1(开始循环)

        示例 2 的变化过程为: 2 -> 4 -> 16 -> 37 -> 58 -> 89 -> 145 -> 42 -> 20 -> 4 (开始循环)

        实际上,当最终的数字变为 1 后,也相当于进入了循环,后面的数据都只会为 1 ,相当于进入了一个全为 1 的循环

        看下面的图像更清晰:

        所以我们可以得出结论,重复上述的过程肯定会产生循环,若循环中全是 1 就代表是快乐数,循环中没有 1 就不是快乐数

        我们判断一个链表里有没有环,通常是通过快慢指针的方式,原理就是,如果链表有环,快慢指针肯定就会相遇,根据这个原理,我们可以通过快慢指针去获取环中的数据,这样就能判断该数是否是快乐数了

        可能有同学会迷惑,我们的参数不是一个数吗,怎么会有链表这样的数据结构呢?如上图,我们可以将数的变化过程看作是一个遍历链表的过程,slow 慢指针一个循环变换一次数据,fast 快指针一个循环变换两次数据,当 slow 慢指针的值和 fast 快指针的值相等时,就相当于指向了环中的一个数据

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

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

相关文章

【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)

文章目录 前言正文一、POM依赖二、核心Java文件2.1 自定义表头注解 ExcelColumnTitle2.2 自定义标题头的映射接口2.3 自定义有序map存储表内数据2.4 表头工厂2.5 表flag和表头映射枚举2.6 测试用的实体2.6.1 NameAndFactoryDemo2.6.2 StudentDemo 2.7 启动类2.8 测试控制器 三、…

linux作业管理_jobs

4.2 作业管理 是指控制当前正在运行的进程的行为,也称为进程控制。 是shell的一个特性,使用户能在多个独立进程间进行切换。 例如,用户可以挂起一个正在运行的进程,稍后再恢复其运行。当用户使用vim编辑一个文本文件&#xff0c…

PCL 空间直角坐标系与极坐标系的相互转换(C++详细过程版)

目录 一、算法原理1、空间坐标系转极坐标系2、极坐标系转空间坐标系二、代码实现三、结果展示1、空间坐标系转极坐标系2、极坐标系转空间坐标系本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不

【算法】单调栈题单(矩阵系列、字典序最小、贡献法)⭐

文章目录 题单来源经典题单496. 下一个更大元素 I(单调栈模板题)503. 下一个更大元素 II(单调栈循环数组)2454. 下一个更大元素 IV(第二个更大的元素:两个单调栈)456. 132 模式(单调…

C++ day44完全背包问题 零钱兑换Ⅱ 组合总和Ⅳ

完全背包:一个物品可以使用无数次,将01背包中倒序遍历背包变成正序遍历背包 遍历顺序:在完全背包中,对于一维dp数组来说,其实两个for循环嵌套顺序是无所谓的! 先遍历物品,后遍历背包可以&#…

idea报错——Access denied for user ‘root‘@‘localhost‘ (using password: YES)

项目场景: 使用idea启动SpringBoot项目报错,可以根据提示看到是数据库的原因,显示使用了密码,具体报错信息如下: 解决方案: 第一步:先去配置文件里面查看连接MySQL的url是否正确,如果…

【蓝桥杯选拔赛真题73】Scratch烟花特效 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch烟花特效 一、题目要求 编程实现 二、案例分析 1、角色分析

JDK1.8_X64在LINUX下安装

JDK1.8在LINUX下安装步骤: 在/usr/lib/目录下新建jvm文件夹,如果已有jvm文件夹,则将之前的JDK版本删除,即在jvm目录下执行命令:rm–rf *将JDK文件jdk-8u40-linux-x64.gz拷贝到/home/目录下;在/home/目录下…

华天动力-OA8000 MyHttpServlet 文件上传漏洞复现

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合,为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA MyHttpServlet 存在任意文件上传漏洞,未经身份认证的攻击者可上传恶意的raq文件并执行raq文件中的任意…

PC行内编辑

点击编辑,行内编辑输入框出现,给列表的每条数据定义编辑标记,最后一定记得 v-model双向绑定,使数据回显。 步骤: 1、给行数据定义编辑标记 2、点击行编辑标记(isedit) 3、插槽根据标记渲染表单 …

数据结构:图文详解双向链表的各种操作(头插法,尾插法,任意位置插入,查询节点,删除节点,求链表的长度... ...)

目录 一.双向链表的概念 二.双向链表的数据结构 三.双向链表的实现 节点的插入 头插法 尾插法 任意位置插入 节点的删除 删除链表中第一次出现的目标节点 删除链表中所有与关键字相同的节点 节点的查找 链表的清空 链表的长度 四.模拟实现链表的完整代码 前言&am…

“此应用专为旧版android打造,因此可能无法运行”,问题解决方案

当用户在Android P系统上打开某些应用程序时,可能会弹出一个对话框,提示内容为:“此应用专为旧版Android打造,可能无法正常运行。请尝试检查更新或与开发者联系”。 随着Android平台的发展,每个新版本通常都会引入新的…

线程池大小设置多少,比较合适?

设置线程数的核心点 压测!压测!再压测!实际对性能要求比较高的场景,压测是最佳的方式! 并发编程适用于什么场景? CPU 密集型 对于 CPU 密集型任务,希望最大限度地提高 CPU 利用率&#xff0c…

每周一算法:背包问题(三)多重背包

多重背包 有 N N N件物品和一个容量是 M M M的背包。第 i i i种物品最多有 s i s_i si​件,每件的体积是 v i v_i vi​,价值是 w i w_i wi​。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输…

pytorch 模型量化quantization

pytorch 模型量化quantization 1.workflow1.1 PTQ1.2 QAT 2. demo2.1 构建resnet101_quantization模型2.2 PTQ2.3 QAT 参考文献 pytorch框架提供了三种量化方法,包括: Dynamic QuantizationPost-Training Static Quantization(PTQ&#xff0…

DevOps搭建(三)-Git安装详细步骤

前面两篇文章我们讲了如何安装swappiness安装和虚拟机。这篇我们详细讲下如何安装Git。 1、YUM源更改为阿里云镜像源 1.1、备份CentOS-Base.repo 先备份原有的 CentOS-Base.repo 文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup…

OCR原理解析

目录 1.概述 2.应用场景 3.发展历史 4.基于传统算法的OCR技术原理 4.1 图像预处理 4.1.1 灰度化 4.1.2 二值化 4.1.3 去噪 4.1.4 倾斜检测与校正 4.1.4.2 轮廓矫正 4.1.5 透视矫正 4.2 版面分析 4.2.1 连通域检测文本 4.2.2 MSER检测文本 4.3 字符切割 4.3.1 连…

2022年全国大学生数据分析大赛医药电商销售数据分析求解全过程论文及程序

2022年全国大学生数据分析大赛 医药电商销售数据分析 原题再现: 问题背景   20 世纪 90 年代是电子数据交换时代,中国电子商务开始起步并初见雏形,随后 Web 技术爆炸式成长使电子商务处于蓬勃发展阶段,目前互联网信息碎片化以…

数组逆序重放

数组逆序重放的意思是将数组的元素逆序排列,然后重新放回原数组中。这个操作可以在很多编程语言中实现,例如Python、Java等。 下面是一个Python的示例代码,可以实现这个操作: def reverse_and_rearrange(arr): # 反转数组 …

git rebase冲突说明(base\remote\local概念说明)

主线日志及修改 $ git log master -p commit 31213fad6150b9899c7e6b27b245aaa69d2fdcff (master) Author: Date: Tue Nov 28 10:19:53 2023 08004diff --git a/123.txt b/123.txt index 294d779..a712711 100644 --- a/123.txtb/123.txt-1,3 1,4 123 4^Mcommit a77b518156…