一起养成写作习惯!这是我参与「掘金日新计划 · 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的循环流程:
其它的数字,暂且成为不快乐数,就会进入一个 的死循环里面,如此循环往复。
四、编码实现
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;
}
};
复制代码