Lettcode_202_Happy Number

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/45396585

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

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay),
or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

Example: 19 is a happy number

  • 12 + 92 = 82
  • 82 + 22 = 68
  • 62 + 82 = 100
  • 12 + 02 + 02 =
    1

思路:

(1)题意为判断给定的整数是不是为1个“快乐的数”,所谓快乐的数需要满足1下几个条件:将该整数的每一个位上的数字的平方相加得到1个新的整数,循环对新的整数进行上述操作,如果最后所得整数收敛于1,则这样的数字为1个“快乐的数”。

(2)首先,判断0肯定不是1个“快乐的数”;其次,对初始数字的每一个位上数的平方相加,循环进行前面的操作;需要注意的是,对可能会出现死循环的数字需要进行判断,需要判断循环的次数,这里通过测试得到循环次数为4,即如果4次循环进程中,每次所得数字中都不收敛于1,则判断该数字不是1个“快乐的数”,否则,则是1个“快乐的数”;最后,对那些循环得到的结果为1的数字,直接返回true,即该数字是1个“快乐的数”。

(3)详情见下方代码。希望本文对你有所帮助。

算法代码实现以下:

/**
* @author liqq
*/
public class HappyNumber {
public static boolean isHappy(int n) {
if (n == 0)
return false;
return testhappy(0, n);
}

private static boolean testhappy(int number, int n) {
int sum = n;
int add = 0;
boolean hasone = false;
while (sum != 0) {
int square = (sum % 10) * (sum % 10);
add += square;
sum = sum / 10;
if (sum % 10 == 1) {
hasone = true;
}
}
number++;

int test = add;
while (test != 0) {
if (test % 10 == 1) {
hasone = true;
}
test = test / 10;
}

if (hasone == false && number > 4)
return false;

if (add != 1 || add % 10 != 1) {
boolean istrue = testhappy(number, add);
if (istrue)
return true;
} else {
return true;
}
return false;
}
}

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » Lettcode_202_Happy Number

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡