一、题目链接
https://leetcode.cn/problems/happy-number/
二、解题思路
三、实施步骤
四、Java程序
class Solution {
/**
* 计算给定整数每位数字的平方和
*
* @param n int类型的整数,代表给定整数
* @return int类型的整数,代表n每位数字的平方和
*/
public int sumOfEachDigitSquare(int n) {
int ans = 0; // n每位数字的平方和,初始时为0
/* 在n尚未变为0时 */
while (n != 0) {
ans = ans + (n % 10) * (n % 10); // 累加当前n的个位数的平方和
n = n / 10; // 移除当前n的个位数
}
return ans;
}
/**
* 判断给定整数是否为快乐数
*
* @param n int类型的整数,代表给定整数
* @return true当且仅当n是快乐数,否则false
*/
public boolean isHappy(int n) {
int[] nums = new int[100]; // 存储n的每位数字的平方和,初始时均为0
int t = 0; // nums中有效元素的个数,初始时为0
/* 持续检测 */
while (true) {
n = sumOfEachDigitSquare(n); // 计算n每位数字的平方和
if (n == 1) { // 如果n是1
return true; // 说明n是快乐数
}
/* 遍历nums数组的所有有效元素 */
for (int i = 0; i < t; i++) {
if (nums[i] == n) { // 如果当前有效元素等于n
return false; // 说明n已经出现过至少一次,n不是快乐数
}
}
nums[t] = n; // 将更新的n推入nums中
t++; // nums的有效元素个数加1
}
}
}