import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return bool布尔型 */ public static Set<Integer> set = new HashSet<>(); public boolean isHappy (int n) { // write code here if (n == 1) { return true; } if (set.contains(n)) { return false; } else { set.add(n); } StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(n); int result = 0; for (int i = 0; i < stringBuffer.length(); i++) { int value = stringBuffer.charAt(i) - '0'; result += value * value; } return isHappy(result); } }
本题主要考察递归,所用编程语言是java。
我们知道对于一个编号为正整数的奶牛,每一次将该编号替换为它每个位数上的数字的平方和。然后重复这个过程,直到编号变为 1,如果出现循环那么就始终变不到 1。如果最后结果能变为 1,那么这个编号对应的奶牛就是快乐奶牛。关键点如何判断出现循环,对于判断循环我们可以用一个集合存储每个递归过程的正整数,如果再次出现就表明出现了循环