算法题每日一练---第74天:快乐数

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情

一、问题描述

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

「快乐数」 定义为:

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

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

题目链接:快乐数

二、题目要求

样例

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

考察

1.数学思想
2.建议用时15~35min
复制代码

三、问题分析

快乐数理解起来很容易,就是拆分数位平方相加就行。这里我们需要一个结束的条件,那就是必须为2位数。

当n属于1~9时,退出位数相加的循环。而最后的单位数字只有1或7才可以结束循环成为快乐数。

如7的循环流程: 7 2 = 49 = 4 2 + 9 2 = 97 = 9 2 + 7 2 = 130 = 1 2 + 3 2 + 0 = 10 = 1 7^2=49=4^2+9^2=97=9^2+7^2=130=1^2+3^2+0=10=1

其它的数字,暂且成为不快乐数,就会进入一个 4 16 37 58 89 145 42 20 4 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的死循环里面,如此循环往复。

3.gif

四、编码实现

class Solution {
public:
    bool isHappy(int n) {
        int k,ans;//初始化定义
        while(n>9)//单位数字直接退出
        {
            k=n;//暂存
            ans=0;//存储位数平方相加的结果
            while(k)
            {
                ans+=(k%10)*(k%10);//平方相加
                k=k/10;
            }
            n=ans;
        }
        if(n==1||n==7)//1或7,输出true
            return true;
        else
            return false;
    }
};
复制代码

五、测试结果

2.png

扫描二维码关注公众号,回复: 13777103 查看本文章

1.png

猜你喜欢

转载自juejin.im/post/7084389996483837965