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,那么这个编号对应的奶牛就是快乐奶牛。关键点如何判断出现循环,对于判断循环我们可以用一个集合存储每个递归过程的正整数,如果再次出现就表明出现了循环