首页 > 学院 > 开发设计 > 正文

leetcode 202. Happy Number

2019-11-06 06:53:43
字体:
来源:转载
供稿:网友

1.题目

Write an algorithm to determine if a number is "happy".

写一个算法,确定一个数字是否是快乐数字,有关快乐数字的定义可以参考百度百科 快乐数字  

2.算法

我们从百度百科上发现,不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。题目中要求是确定是快乐数字就返回true,不是就返回false,所以我们用hashset放平方后的数的和,如果出现循环就不是快乐数

    public boolean isHappy(int n) {        // Write your code here    if (n <= 0)	{		return false;	}	HashSet<Integer> hs = new HashSet<>();	hs.add(n);	while (n != 1)	{		int sum = calcu(n);		if (hs.contains(sum))		{			return false;		}		hs.add(sum);		n = sum;	}	return true;}PRivate int calcu(int n) {	// TODO Auto-generated method stub	int sum = 0;	while (n != 0)	{		sum += Math.pow(n % 10, 2);		n /= 10;	}	return sum;}

,其实我们可以这样做来减小空间复杂度,我们用一个快慢指针,如果循环,快慢指针就会在某一个地方相等

    public boolean isHappy(int n) {        // Write your code here    if (n <= 0)	{		return false;	}	int slow, fast;	slow = fast = n;	do {	    slow = calcu(slow);	    fast = calcu(fast);	    fast = calcu(fast);	    if (fast == 1)	    {	        return true;	    }	} while (fast != slow);	return false;}private int calcu(int n) {	// TODO Auto-generated method stub	int sum = 0;	while (n != 0)	{		sum += Math.pow(n % 10, 2);		n /= 10;	}	return sum;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表