leetcode 0202 快乐数 python与C++


一、思路

首先我们要分析一下,对一个数其各位数字的平方求和会出现什么样的情况。
①陷入一个循环,此循环内只有一个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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值