本文主要是介绍算法----------快乐数 (Java版本),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。
解决方法一:利用set 集合属性
class Solution {public boolean isHappy(int n) {if (n == 1) {return true;}Set<Integer> numSet = new HashSet<>();numSet.add(n);int next;while ((next = getNext(n)) > 0 && !numSet.contains(next)){numSet.add(next);n = next;}return next == 1;}public static int getNext(int n){int i;int sum = 0;while (n != 0){i = n % 10;sum += i*i;n = n/10;}return sum;}
}
解决方法二:快慢指针
class Solution {public int getNext(int n) {int totalSum = 0;while (n > 0) {int d = n % 10;n = n / 10;totalSum += d * d;}return totalSum;}public boolean isHappy(int n) {int slowRunner = n;int fastRunner = getNext(n);while (fastRunner != 1 && slowRunner != fastRunner) {slowRunner = getNext(slowRunner);fastRunner = getNext(getNext(fastRunner));}return fastRunner == 1;}
}
参考:
https://leetcode-cn.com/problems/happy-number/solution/
这篇关于算法----------快乐数 (Java版本)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!