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

3.快乐数专题学习笔记——双指针法在LeetCode 202题中的应用

目录

一、题目解析(来自LeetCode 202题)

快乐数的定义:

示例:

二、算法原理:快慢指针(类比链表找环)

核心思路:

理解:

三、代码实现(Java)

总结


今天在刷LeetCode的时候,遇到了第202题「快乐数」,结合联系链表是否有环这一个知识,我把学习过程整理成了这篇博客~

一、题目解析(来自LeetCode 202题)

OJ链接:https://leetcode.cn/problems/happy-number/

题目要求:编写一个算法判断一个数n是不是快乐数

快乐数的定义:

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

示例:

  • 输入n = 19,输出true。解释:

  • 输入n = 2,输出false(会进入无限循环,永远到不了1)。

二、算法原理:快慢指针(类比链表找环)

做这道题时,可以把快乐数的计算过程类比成链表的遍历,用「快慢指针」来判断是否陷入循环时的数字。

核心思路:

  • 慢指针slow:每次只走一步(即计算一次「数字平方和」)。

  • 快指针fast:每次走两步(即计算两次「数字平方和」)。

  • 如果过程中fast遇到1,说明是快乐数;如果slowfast相遇(且不是1),说明陷入循环,不是快乐数。

理解:

比如n=2的计算过程:2 → 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 → ...这里进入了循环(4之后又回到4)。用快慢指针的话:

  • slow初始为2fast初始为bitSum(2)=4

  • 第一次循环:slow = bitSum(2)=4fast = bitSum(bitSum(4))=bitSum(16)=37

  • 第二次循环:slow = bitSum(4)=16fast = bitSum(bitSum(37))=bitSum(58)=89

  • …… 直到slowfast相遇(或fast到1)。

三、代码实现(Java)

我给的代码非常清晰,分为两个函数:bitSum计算数字的每一位平方和,isHappy用快慢指针判断是否为快乐数。

class Solution { // 返回n这个数每一位上的平方和 public int bitSum(int n) { int sum = 0; while (n != 0) { int t = n % 10; // 取最后一位 sum += t * t; // 平方累加 n /= 10; // 去掉最后一位 } return sum; } public boolean isHappy(int n) { int slow = n, fast = bitSum(n); // 慢指针从n开始,快指针先走一步 while (slow != fast) { // 相遇时退出循环 slow = bitSum(slow); // 慢指针走一步 fast = bitSum(bitSum(fast)); // 快指针走两步 } return slow == 1; // 相遇时是1则是快乐数,否则不是 } }

总结

这道题的核心是把「数字平方和的循环计算」转化为「链表找环」问题,用快慢指针高效判断。通过bitSum函数拆解每一位的操作,再结合快慢指针的移动逻辑,就能解决快乐数的判断~

http://www.jsqmd.com/news/785647/

相关文章:

  • SQL示例:获得积分最多的人,求和操作与去重的关系
  • 观察Taotoken在应对不同时段API请求压力时的稳定性表现
  • 从树状LSTM到神经符号计算:结构化表示与可解释推理的技术演进
  • CANN驱动DCMI自定义信息查询
  • ChatGPT编程能力实测:Kattis平台15%通过率揭示AI代码生成局限
  • 10分钟自动化部署OpenClaw AI助手:基于Ubuntu VPS的完整实践指南
  • 光纤稳定平台动态误差仿真系统GUI设计与实现【附程序】
  • 纵列式双旋翼无人机动力学建模与控制仿真【附模型】
  • 卫星通信遇到“太空天气”会怎样---电离层闪烁对卫星通信的影响
  • P4 猴痘病识别
  • Layui上传组件upload怎么监听大文件上传的百分比进度条
  • Flutter for OpenHarmony 跨平台开发:待办事项功能实战指南
  • CANN/AMCT创建蒸馏模型API
  • 开源OSINT终端Horus:构建本地优先的实时态势感知驾驶舱
  • 本地AI技能安全运行:基于MCP协议与沙盒隔离的Mac离线自动化方案
  • React:useTransition 超详细教程、为什么有了 Fiber,React 默认更新依然会卡顿?useDeferredValue超详细教程
  • ViGEmBus内核驱动深度解析:从系统架构到高级配置的完整技术指南
  • Scikit-learn:从问题到模型——监督学习的最小闭环
  • 将docx博客草稿转化为适于博客园发布的markdown文件
  • AI赋能可持续发展:从技术祛魅到实践审辨
  • CANN/asc-devkit:AlltoAllvWrite集合通信API
  • AI与Web 3.0深度融合:联邦学习、智能合约与AI代理的架构实践
  • 成都钢板代理商|专注西南板材一站式批发|获取盛世钢联免费钢板报价 - 四川盛世钢联营销中心
  • 海信扩大3C智能硬件版图,底气来自哪里?
  • 下肢外骨骼五连杆模型辨识与运动控制器设计【附仿真】
  • Webpack:Webpack 核心配置、什么是 Loader? 什么是plugin?webpack 构建流程
  • CANN/PTO-ISA文档导航
  • 昇腾CANN/ge常量折叠特性分析
  • AI赋能人才分析:从数据治理到模型落地的实战指南
  • 构式语法与人工智能融合:从可解释AI到具身智能体的语言理解新范式