邯郸网站推广怎么做,海洋馆的网站怎么做,手机画户型图的软件,指数题目描述
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为#xff1a;对于一个正整数#xff0c;每一次将该数替换为它每个位置上的数字的平方和#xff0c;然后重复这个过程直到这个数变为 1#xff0c;也可能是无限循环但始终变不到 1。如果可以变为…题目描述
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为对于一个正整数每一次将该数替换为它每个位置上的数字的平方和然后重复这个过程直到这个数变为 1也可能是无限循环但始终变不到 1。如果可以变为 1那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
12 92 82
82 22 68
62 82 100
12 02 02 1
题目解法
解法1
通过使用Set去重判断是否出现了循环
public boolean isHappy(int n) {if(n1) {return false;}int count0, wei0;SetInteger set new HashSetInteger();while(true) {count0;while(n0) {wei n%10;count(wei*wei);n/10;}if(count1) {return true;}else if (set.contains(count)) {return false;}set.add(count);n count;}}解法2
解法1的优化版不使用额外存储使用快慢指针
public boolean isHappy(int n) {if(n1) {return false;}int fastn,slown;while(true) {slow getCount(slow);fast getCount(getCount(fast));if(slow1 || fast1) {return true;}else if (fast slow) {return false;}}}private int getCount(int n) {int count0, wei0;while(n0) {wei n%10;count(wei*wei);n/10;}return count;}解法3
解法3利用数学规律10以内的数字只有1和7是快乐数其他都不是。
public boolean isHappy(int n) {if(n1) {return false;}int count0, wei0;while(true) {count0;while(n0) {wei n%10;count(wei*wei);n/10;}if(count1 || count7) {return true;}if (count 10) {return false;}ncount;}}