稀碎从零算法笔记Day19-LeetCode:快乐数

题型:哈希表、数组

链接:202. 快乐数 - 力扣(LeetCode)

来源: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

题目思路

题目可以分解为 ①求各位的平方和 ②判断平方和是否为1,这种感觉可以递归来不断的求平方和,求完后判断下等于 1

求平方和:创一个sum来接收每个数位的平方,单个数位可以用【取余10】和【除以10】来实现取数。当然不知道循环多少次,直接while(n != 0)就行

判1:sum主要有三种情况 ①等于1 ②不等于1 ③趋于∞

感觉难点在于说服自己【它趋于不了∞】这点

抛开严谨的数学证明,看了题解后有所收获:可以自己算一下"9" "99" "999" "9999" "99999"...这些数的各位平方和 ,虽然位数很多,但是最终都变成了【n*81】------其中n是位数。经过一次计算后原本很夸张的数字变得小了许多,且后面的数字都不如【每一位都是9】这个设定下的平方和大。这样的话会好理解许多

最终sum只有两种情况,问题就演变成了【看sum会不会"循环"】------即是之前出现过一次的值又出现了。这种【判断重复出现】的类型,很自然想到用hash来实现。基于链表的数据结构无法用【数组】来说明"这个指针又回到了这里"这种情况,所以可以用unordered_set<int>来存储链表结点(与unordered_map相同,int是key)。

C++代码

cpp 复制代码
class Solution {
public:
    //获得各位平方和的函数 
    int getnum(int n)
    {
        int sum=0;
        while(n != 0)
        {
            sum += (n%10) * (n%10);
            n/=10;
        }
        return sum;
    }
    bool isHappy(int n) {
        if(n==1 || n==0)
            return n;
        unordered_set<int> ans;
        while(n != 0)
        {
            ans.insert(n);
            n=getnum(n);
            if(n==1)
                break;
            else if(ans.count(n))
                return !n;
        }
        return n;
    }
};

结算页面

相关推荐
RFdragon25 分钟前
分享本周所学——三维重建算法3D Gaussian Splatting(3DGS)
人工智能·线性代数·算法·机器学习·计算机视觉·矩阵·paddlepaddle
2501_926978334 小时前
AI的三次起落发展分析,及未来预测----理论5.0的应用
人工智能·经验分享·笔记·ai写作·agi
路小雨~6 小时前
Transformer架构学习笔记:从数学推导到工程实现与主流变体
笔记·ai·transformer
Zero6 小时前
机器学习微积分--(1)核心思想
人工智能·算法·机器学习
有Li6 小时前
一种病理学内容感知变速率学习图像压缩框架 (PathoLIC)/文献速递-多模态应用技术
人工智能·深度学习·算法·计算机视觉·医学生
x_xbx7 小时前
LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
Ricky_Theseus7 小时前
数据库关系代数 - 连接操作
linux·数据库·算法
绿算技术7 小时前
宝辰股份董事长莅临绿算技术调研交流
人工智能·科技·算法
码云数智-园园7 小时前
哈希冲突的解决之道:深入理解哈希表底层原理
算法·哈希算法
qq_416018727 小时前
C++中的模板方法模式
开发语言·c++·算法