★ 算法OJ题 ★ 力扣202 - 快乐数

news/2024/10/18 18:15:23/

Ciallo~(∠・ω< )⌒☆ ~ 今天,我将和大家一起做一道双指针算法题--快乐数~

目录

一  题目

二  算法解析

三  编写算法


一  题目

202. 快乐数 - 力扣(LeetCode)

二  算法解析

题⽬告诉我们,当我们不断重复操作后,⼀定会出现死循环,有两种情况:

  • 情况⼀:⼀直在 1 中死循环,即 1 -> 1 -> 1 -> 1......。
  • 情况⼆:在历史的数据中死循环,但始终变不到 1。

因此,只要我们能确定循环中是否一直为1,就能得到结果。

那会不会出现一直没有循环的情况呢~ 以下是一个小证明~:

(鸽巢原理):有n+1个鸽子,n个巢,则至少有一个巢的鸽子数大于1。

  • 经过⼀次变化之后的最⼤值 9^2 * 10 = 810 ( 2^31-1=2147483647 。选⼀个更⼤的最⼤ 9999999999 ),也就是变化的区间在 [1, 810] 之间;
  • 根据鸽巢原理,⼀个数变化 811 次之后,必然会出现重复数
  • 因此,变化的过程最终会⾛到⼀个圈⾥⾯,因此可以⽤快慢指针来解决。

算法思路:

此题有点像链表带环问题,可以用快慢双指针来求解,快慢指针有⼀个特性,就是在⼀个圆圈中,快指针总是会追上慢指针的,也就是说他们总会相遇在⼀个位置上。如果相遇位置的值是 1 ,那么这个数⼀定是快乐数;如果相遇位置不是 1 的话,那么就不是快乐数。

三  编写算法

class Solution {
public:int bitsum(int x) // 返回n这个数每⼀位上的平⽅和{int tmp = 0;int sum = 0;while (x){tmp = x % 10;sum += tmp * tmp;x /= 10;}return sum;}bool isHappy(int n) {int slow = n, fast = bitsum(n); //若fast也是n的话就不会进循环while (slow != fast){slow = bitsum(slow);fast = bitsum(bitsum(fast));}return slow == 1;}
};


http://www.ppmy.cn/news/1517966.html

相关文章

数学基础 -- 线性代数之行阶梯形

行阶梯形 行阶梯形&#xff08;Row Echelon Form, REF&#xff09;是线性代数中用于简化矩阵形式的一种方法&#xff0c;常用于求解线性方程组。矩阵经过行变换&#xff08;如高斯消元法&#xff09;后可以转换为行阶梯形&#xff0c;它具有以下特点&#xff1a; 行阶梯形的定…

HTML静态网页成品作业(HTML+CSS)——游戏战地介绍设计制作(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

【uniapp重大bug】uni-data-select的localdata改变,也会触发@change方法

bug描述 uni-data-select的下拉列表值localdata是动态获取的&#xff0c;且绑定了change方法&#xff0c;在页面加载后&#xff0c;请求localdata的列表数据&#xff0c;给localdata重新赋值&#xff0c;此时发现自动触发了change方法 当前uni版本&#xff1a;^2.0.2-30709202…

day-43 盛最多水的容器

思路 双指针&#xff1a;首先令i0,jheight.length-1,选取短板&#xff08;即Math.min(height[i],height[j])&#xff09;,然后将短板向内移动&#xff0c;直达i>j即可得到答案。 解题过程 短板向内移动&#xff1a;水的容量可能增大 长板向内移动&#xff1a;水的容量不可能…

javascript网页设计案例

以下是一些使用 JavaScript 进行网页设计的案例&#xff0c;这些案例展示了 JavaScript 在前端开发中的强大功能和灵活性。每个案例都包含了基本的实现思路和代码示例。 图片画廊&#xff08;Image Gallery&#xff09; 功能&#xff1a;展示一组图片&#xff0c;并支持点击放…

聚焦AI4SE软件工程领域,基于Multi Agent System多智能体系统开发的最新成果,实现软件开发领域的PUGC!

可能有很多小伙伴不了解AI4SE是什么&#xff0c;其实从字意上就不难看出一定是和AI相关。 AI4SE&#xff08;Artificial Intelligence for Software Engineering&#xff09;是指将人工智能技术应用于软件工程领域。 其核心目标是通过自动化和智能化技术降低软件开发的复杂性…

蓝花楹花语探秘:从宁静忧郁到等待爱情的深刻寓意

在时光的长河中&#xff0c;有一种花朵宛如梦幻的精灵&#xff0c;每当它绽放之时&#xff0c;那一片绚烂的蓝紫色便如同璀璨的星空倾洒人间&#xff0c;它就是蓝花楹。蓝花楹那独特的身姿和醉人的色彩&#xff0c;仿佛自带一种神秘的魔力&#xff0c;吸引着无数人驻足凝望。而…

C++面向对象学习(多态)

C多态 多态&#xff0c;看字面意思都能理解吧&#xff0c;就是多种形态。当类之间存在层次结构&#xff0c;并且类之间是通过继承关联时&#xff0c;就会用到多态。 在我们使用继承的时候&#xff0c;我们调用父类的函数就会将父类的数据一并继承下来&#xff08;解释的不是很…