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

京公网安备 11010502036488号