编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
链接:https://leetcode-cn.com/problems/happy-number
方法一:递归+Set去重
发现递归中用contains比add方法效率好像要高一点?
//递归 public boolean isHappy1(int n) { if(n==1) { return true; } int sum =0; while(n>0) { sum+= (n%10)*(n%10); n/=10; } if(happySet.contains(sum)) { return false; } happySet.add(sum); return isHappy1(sum); }
![]()
递归:但是用的add判断
public boolean isHappy2(int n) { if(n==1) return true; int res =0; while(n>0) { int t=n%10; n/=10; res+=t*t; } if(!set.add(res)) return false; set.add(res); System.out.println(res); return isHappy2(res); }
![]()
方法二:迭代
public static boolean isHappy(int n) { HashSet<Integer> set = new HashSet<>(); while(n!=1) { n=getPowNum(n); if(!set.add(n)) { return false ; } } return true; } public static int getPowNum(int n) { int res=0; while(n>0) { int t=n%10; n/=10; res+=t*t; } return res; }

浙公网安备 33010602011771号