跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

算法:双指针解决快乐数问题

快乐数判断问题要求验证正整数经过各位数字平方和迭代后是否收敛于 1。若无法收敛则进入无限循环。利用快慢指针检测循环:慢指针每次迭代一次,快指针每次迭代两次。若两者相遇且值为 1 则为快乐数,否则存在非 1 循环。代码提供 Java 实现,包含辅助函数 bitSum 及主逻辑 isHappy。

禅心发布于 2026/3/24更新于 2026/5/2924 浏览
算法:双指针解决快乐数问题

一、题目介绍

202. 快乐数 - 力扣(LeetCode)

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

「快乐数」 定义为:

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

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

示例 1:

输入: n = 19 输出: true 解释: 1² + 9² = 82 → 8² + 2² = 68 → 6² + 8² = 100 → 1² + 0² + 0² = 1

示例 2:

输入: n = 2 输出: false

提示:

  • 1 <= n <= 2^31 - 1

二、快慢指针原理

该问题可以转化为链表环的检测问题。由于快乐数的计算过程是确定性的,如果某个数不是快乐数,其计算序列必然进入循环。

使用快慢指针法(Floyd 判圈算法):

  • 慢指针每次走一步(计算一次平方和)。
  • 快指针每次走两步(计算两次平方和)。
  • 如果存在环,快指针最终会追上慢指针。
  • 若相遇时值为 1,则是快乐数;否则不是。

三、代码实现

public int bitSum(int n) {
    int sum = 0;
    while (n != 0) {
        int tmp = n % 10;
        sum += tmp * tmp;
        n /= 10;
    }
    return sum;
}

public boolean isHappy(int n) {
    int slow = n;
    int fast = bitSum(n);
    while (slow != fast) {
        // 一定是闭环的,所以一定会再相遇的
        slow = bitSum(slow);
        fast = bitSum(bitSum(fast));
    }
    return fast == 1;
}

目录

  1. 一、题目介绍
  2. 二、快慢指针原理
  3. 三、代码实现
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • IntelliJ IDEA 接入 AI 编程助手:Copilot、DeepSeek、GPT-4o
  • C++入门知识(三):引用、内联函数与 nullptr 概念详解
  • Stable Diffusion v1.5 企业合规实践:生成内容水印嵌入与版权元数据标注
  • C++ STL 哈希表原理与模拟实现
  • Vue3 前端开发常用 20 道面试题及代码解析
  • Claude Code 在 Linux(Ubuntu) 上的完整安装部署指南
  • Codex 快速入门:工程级 AI 编程代理
  • AI 时代如何脱颖而出:商业认知与行动指南
  • RPC 原理与 BRPC 实战:基于 C++ 的分布式通信实现
  • 8 篇必读的大模型论文
  • PicView 跨平台开源图像浏览器
  • ToClaw:基于 OpenClaw 的云端 AI 桌面自动化助手
  • 深入理解 Token:自然语言处理中的文本最小单元
  • llama.cpp SYCL 后端配置指南:在 Intel GPU 上运行大模型
  • macOS 安装 Claude 提示 command not found 问题排查与解决
  • Qwen2.5-7B-Instruct LoRA 微调实战 - LLaMA-Factory 单机单卡 V100
  • 文心一言、通义千问、Kimi、豆包:四大国产大模型对比评测
  • AI 产品经理面试 20 个核心问题及备考策略
  • Python 语言简介与开发环境搭建指南
  • Python 数据分析实战:模型评估、图像分析与性能优化

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online