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

双指针——快乐数

一.题目描述

202. 快乐数 - 力扣(LeetCode)

二.题目解析

我们要判断一个数是不是快乐数要通过它的三个性质来进行判断。这个数会一直变化,由它的各个位的平方和重新构成这个数。如果这个数在变化的过程中变成了1,那么就是快乐数;如果陷入了循环,一直变不到1,就说明不是快乐数。

 所以,对于一个数n来说有两种情况:1、在进行若干次变换后变成了1;2、在进行若干次变换之后进入了循环。

但其实,我们可以将第一种也归为是进入循环的一种,只不过每一个位置都是1.

三.算法原理 

我们看到上面的情况图有没有联想到之前学习链表的一道题——带环链表。判断一个链表是否带环,我们利用了快慢双指针。这里我们也可以使用快慢指针来实现:

这里其实是在模拟带环链表的性质。我们让slow每次变换一次,fast变换两次即可。

扩展:

这道题之所以简单是因为题目已经告诉我们一定会进行循环,但是如果没有这句话呢?有没有可能n一直变换下去,不会进入循环?

答案是不会的!

四.代码实现

因为我们需要频繁求一个数的每个位的平方和,所以我们将其写成一个函数。

int getSquare(int n)
{
    int ans = 0;
    while (n)
    {
        int index = n % 10;
        ans += index * index;
        n /= 10;
    }
    return ans;
}

bool isHappy(int n)
{
    int slow = n;
    int fast = getSquare(n);
    while (fast != slow)
    {
        slow = getSquare(slow);
        fast = getSquare(getSquare(fast));
    }
    return slow == 1;
}

http://www.kler.cn/a/452030.html

相关文章:

  • Docker数据库的主从复制
  • 【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
  • 记一次前端Vue项目国际化解决方案
  • 【0x001D】HCI_Read_Remote_Version_Information命令详解
  • 打造高效的 LaTeX 公式编辑器
  • information_schema是什么?
  • Echarts+vue电商平台数据可视化——后台实现笔记
  • 【每日学点鸿蒙知识】大图性能问题、WebView加载网页问题、H5页面数据更新问题、安全控件位置影响数据保存、企业内部应用发布
  • 双重判定锁来解决缓存击穿问题
  • VTK知识学习(27)- 图像基本操作(二)
  • Cyberchef实用功能之-批量提取XML数据文件的字段内容
  • Win10提示“缺少fbgemm.dll”怎么办?缺失fbgemm.dll文件的修复方法来啦!
  • 4-pandas常用操作
  • LeetCode:257. 二叉树的所有路径
  • 一、后端到摄像头(监控摄像头IOT)
  • Docker--宿主机执行docker容器的命令
  • 【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(三):基于BT行为树实现复杂敌人BOSS-AI
  • MVC 参考手册
  • Flink中并行度和slot的关系——任务和任务槽
  • VUE前端实现防抖节流 Lodash
  • TCN-Transformer+LSTM多变量回归预测(Matlab)添加气泡图、散点密度图
  • “自动驾驶第一股” 图森未来退市转型:改名 CreateAI、发布图生视频大模型 “Ruyi”
  • 大模型-Dify使用笔记
  • QT安装5.15之后的版本和安装后添加其他漏装模块
  • mac中idea中英文版本切换
  • 金融数据可视化实现