【算法】双指针(三)[快慢指针]-快乐数

【算法】双指针(三)[快慢指针]-快乐数

目录

一、题目介

二、快慢指针原理

三、提交代


一、题目介绍

202. 快乐数 - 力扣(LeetCode)

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

「快乐数」 定义为:

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

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

示例 1:

输入:n = 19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1

示例 2:

输入:n = 2 输出:false

提示:

  • 1 <= n <= 231 - 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; }

Read more

【 C++ 入门】Cyber骇客的 流式文本序列处理器 —— 【 string 类】万字大文带你从0学好C++的string类!

【 C++ 入门】Cyber骇客的 流式文本序列处理器 —— 【 string 类】万字大文带你从0学好C++的string类!

⚡ CYBER_PROFILE ⚡ /// SYSTEM READY /// [WARNING]: DETECTING HIGH ENERGY 🌊 🌉 🌊 心手合一 · 水到渠成 >>> ACCESS TERMINAL <<<[ 🦾 作者主页 ][ 🔥 C语言核心 ][ 💾 编程百度 ][ 📡 代码仓库 ] --------------------------------------- Running Process: 100% | Latency: 0ms 索引与导读 * 一、为什么学习 string类 ? * 二、C++ 标准库中的 string 类 * 2.1)auto和范围for * 2.2)string类的常用接口 * 🚩1)string类的常用构造 * 🚩2)string类对象的容量操作 * ❗注意事项 * 1)size(

By Ne0inhk
C++ 虚函数与纯虚函数:多态的核心实现基石

C++ 虚函数与纯虚函数:多态的核心实现基石

C++ 虚函数与纯虚函数:多态的核心实现基石 💡 学习目标:深度理解虚函数与纯虚函数的本质区别,掌握虚函数表的底层原理,能够灵活运用二者设计具备多态特性的类结构。 💡 学习重点:虚函数的声明与重写规则、纯虚函数与抽象类的使用场景、虚函数表的工作机制、虚函数的常见陷阱与解决方案。 一、虚函数的本质与定义 ✅ 结论:虚函数是 C++ 实现动态多态的核心,通过在基类成员函数前添加 virtual 关键字,允许派生类重写该函数,并在运行时根据对象的实际类型调用对应版本。 1.1 虚函数的声明语法 虚函数的声明必须在基类中进行,语法格式如下: class 基类名 {public:virtual 返回值类型 函数名(参数列表){// 函数体}}; 1.2 虚函数的核心特性 1. 运行时绑定:函数调用关系在程序运行时确定,而非编译时。 2. 重写规则:派生类重写的函数必须与基类虚函数的函数名、参数列表、返回值类型完全一致(协变类型除外)。 3.

By Ne0inhk
踏入 C++ 的深邃世界:实现 unordered_set 与 unordered_map 的优雅之旅

踏入 C++ 的深邃世界:实现 unordered_set 与 unordered_map 的优雅之旅

文章目录 * 前言 * ☎️一、改造HashTable * 📞1.1 `HashNode` 类 * 📞1.2 `HashTable`类框架 * 📞1.3 插入操作 `Insert` * 📞1.4 查找操作 `Find` * 📞1.5 删除操作 `Erase` * 📞1.6 析构函数`~HashTable()` * ☎️二、 `HTIterator` 迭代器简介 * 📞2.1 前置声明 * 📞2.2 成员变量 * 📞2.3 构造函数 * 📞2.4 拷贝构造函数 * 📞2.5 `operator*` 和 `operator->` * 📞2.

By Ne0inhk
C++测试与调试:确保代码质量与稳定性

C++测试与调试:确保代码质量与稳定性

C++测试与调试:确保代码质量与稳定性 一、学习目标与重点 本章将深入探讨C++测试与调试的核心知识,帮助你确保代码的质量与稳定性。通过学习,你将能够: 1. 理解测试与调试的基本概念,掌握测试方法和工具 2. 学会使用单元测试框架,如Google Test和Catch2 3. 理解集成测试的重要性,确保系统的功能正确性 4. 学会使用调试工具,如GDB和Visual Studio调试器 5. 培养测试与调试思维,设计高质量的代码 二、测试的基本概念 2.1 测试的分类 测试可以分为以下几类: * 单元测试:测试单个函数或类的功能 * 集成测试:测试多个模块的集成功能 * 系统测试:测试整个系统的功能 * 验收测试:测试系统是否满足用户需求 * 性能测试:测试系统的性能指标 2.2 测试原则 测试应该遵循以下原则: * 测试应该尽可能早地进行 * 测试应该覆盖所有可能的场景 * 测试应该是自动化的

By Ne0inhk