一、思路
首先我们要分析一下,对一个数其各位数字的平方求和会出现什么样的情况。
①陷入一个循环,此循环内只有一个1(快乐起来了)
②陷入一个循环,循环内不包含1
所以我们需要 查看当前数其各位数字的平方求和有没有在之前出现过,出现过就进入了情况②,没出现就继续往下算。
二、代码
1.python
代码如下:
class Solution:
def isHappy(self, n) :
def res(n):
num = 0
while n>0:
n,d = divmod(n,10)
num += d**2
return num
dic = {}
while True:
if n == 1:
return True
if n in dic.keys():
return False
dic[n] = dic.get(n,0) + 1
n = res(n)
2.C++
class Solution {
public:
bool isHappy(int n) {
map<int,int> m;
while(1){
if(n == 1){
return true;
}
if(m.find(n) != m.end()){
return false;
}
m[n]++;
n = res(n);
}
}
int res(int n){
int num = 0, d = 0;
while(n>0){
d = n%10;
n = n/10;
num += d*d;
}
return num;
}
};