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

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

5.png

一、问题描述


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


「快乐数」 定义为:

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

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


题目链接:快乐数


二、题目要求


样例

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


考察

数学思想
建议用时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

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


3.gif

四、编码实现


classSolution {
public:
boolisHappy(intn) {
intk,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,输出truereturntrue;
elsereturnfalse;
    }
};


五、测试结果3.png

相关文章
|
算法
【算法专题突破】双指针 - 快乐数(3)
【算法专题突破】双指针 - 快乐数(3)
48 0
|
算法 测试技术 容器
【算法挨揍日记】day02——双指针算法_快乐数、盛最多水的容器
题目: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为:
59 0
|
1月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
68 0
|
6月前
|
算法
【优选算法】——Leetcode——202—— 快乐数
【优选算法】——Leetcode——202—— 快乐数
【优选算法】——Leetcode——202—— 快乐数
|
6月前
|
算法
优选算法|【双指针】|202.快乐数
优选算法|【双指针】|202.快乐数
|
6月前
|
算法 测试技术
day2·算法-快乐数-有效三角形个数
day2·算法-快乐数-有效三角形个数
37 0
|
6月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 202. 快乐数 算法解析
☆打卡算法☆LeetCode 202. 快乐数 算法解析
|
6月前
|
算法 JavaScript
|
存储 算法 Serverless
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
72 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
|
算法 安全
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和