标签:math inline 列操作 span while 使用 指针 个数 strong
https://leetcode.com/problems/happy-number/
给定一个数字,每一次拿出这个数字 abc 的每一位执行 \(a^2 + b^2 + c^2\) ,得到一个新的数,然后再把新的数进行逐位平方取和,如果最后面得到的值为1,那么这个数就是 happy number
对于一个数A,经过一系列上面的操作后,达到数字B,经过一系列操作,最后还会到数字B,即 A --> B --> B --> B,因此我们需要找到是否出现了循环
class Solution {
public:
bool isHappy(int n) {
int n1 = n, n2 = next(n);
while(n1!=n2 && n2 != n)
{
n1 = n2;
n2 = next(n2);
}
if(n1==1)
return true;
else
return false;
}
private:
int next(int n)
{
int result=0, temp=0;
while(n)
{
temp = n%10;
result += temp*temp;
n/=10;
}
return result;
}
};
还有一种方法:对于非快乐数,最后面肯定会到达4(待证明),因此只要判断每次经过上述操作是否得到4
class Solution {
public:
bool isHappy(int n) {
int result=0;
while(n!=1 && n!=4){
int result=0;
while(n)
{
result += (n%10) * (n%10);
n/=10;
}
n = result;
}
return n==1;
}
};
标签:math inline 列操作 span while 使用 指针 个数 strong
原文地址:https://www.cnblogs.com/qiulinzhang/p/12623912.html