题目摘要
判断一个正整数是否是“Happy Number”。
不断将正整数各位平方和相加,知道该正整数开始重复,如果重复为1,则是“Happy Number”。
解法
用Floyd环检测算法循环n,知道n开始出现重复,如果此时n = 1
,则是“Happy Number”。
public class Solution {
public boolean isHappy(int n) {
int slow = n;
int fast = figure(slow);
while (slow != fast) {
slow = figure(slow);
fast = figure(fast);
fast = figure(fast);
}
return slow == 1 ? true : false;
}
public int figure(int n) {
int result = 0;
while (n > 0) {
result += Math.pow(n % 10, 2);
n /= 10;
}
return result;
}
}
注意
- 用Floyd环检测法
可问问题
- 整数类型、范围
原题
Write an algorithm to determine if a number is “happy”.
A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.
Example: 19 is a happy number
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1