您的位置:首页 > 其它

LeetCode-202:快乐数

2019-07-20 10:09 148 查看

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

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

示例:
输入: 19
输出: true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

代码实现
C++:

模拟平方和更新过程,记录出现过的平方和,若某个数字出现两次,说明程序会一直在这两个数字之间死循环,即不是快乐数,直接返回false。否则可以到达平方和为1,返回true。

class Solution {
public:
bool isHappy(int n) {
map<int, bool> appearNums;
while(n > 1){
int temp = 0;
while(n > 0){
temp += (n%10)*(n%10);
//获取下一位数
n /= 10;
}
n = temp;
//判断temp是否是第一次在appearNums(映射表)中出现
if(appearNums.count(temp) == 0){
appearNums[temp] = true;
}
else{
//第二次出现,意味着后面将会进入死循环
return false;
}
}
return true;
}
};

Python:

class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
# 如果是happy数据,每个求平方和的数字只会出现一次
appearNums = []
while n > 1:
# 1的平方和就是1
temp = 0
# 求每位数的平方和
while n > 0:
temp += (n%10)**2
# 获取下一位数
n /= 10
n = temp
# 将每一次平方和数据添加到列表
if temp not in appearNums:
appearNums.append(temp)
else:
# 如果是happy数每个平方和的数只能出现一次
# 出现两次意味着进入死循环
return False

return True
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: