编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
看别人的分析说:
- 分离n的每一位,计算平方和,若为1,则返回真,若不为1则将平方和赋值给n,继续循环;
- 使用集合记录过程中的出现的平方和,若平方和第二次出现,说明陷入死循环,返回False
原因是什么不明白。。。
别人
代码:
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
setTemp = []
while True:
sums = 0
while n // 10:
sums += (n % 10) ** 2
n //= 10
sums += (n % 10) ** 2
if sums == 1:
return True
n = sums
# print sums
# print setTemp
if sums in setTemp:
return False
setTemp.append(sums)
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class
Solution(
object
):
def
isHappy(
self
, n):
"""
:type n: int
:rtype: bool
"""
got
=
set
()
while
n !
=
1
and
n
not
in
got:
got.add(n)
sum
=
0
while
n:
sum
+
=
(n
%
10
)
*
*
2
n
/
/
=
10
n
=
sum
return
n
=
=
1
|
我:
# -*- coding:utf-8 -*-
import math
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
setTemp = []
if(n==1):
return True
while(n!=1):
sum_n = 0
while(n!=0):
sum_n += (n % 10)**2
# print(sum_n)
n = n//10
# print(sum_n)
if(sum_n == 1):
return True
# print(setTemp)
n = sum_n
if(sum_n in setTemp):
return False
setTemp.append(sum_n)
def main():
n = 119
rs = Solution()
print(rs.isHappy(n))
if __name__ == '__main__':
main()