package com.mxnet;
import java.util.HashSet;
public class Solution202 {
public static void main(String[] args) {
}
/**
* 编写一个算法来判断一个数 n 是不是快乐数。
*
* 「快乐数」 定义为:
* 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
* 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
* 如果这个过程 结果为 1,那么这个数就是快乐数。
* 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
* @param n
* @return
* 思路:
* 1. 使用hash结构判断在生成下一个数的时候是否出现循环
* 2. 首先使用一个函数计算改数的每个位置的平方和
* 3. 在循环生成下一个数的时候判断是否出现循环
* 4. 若出现 则停止,并判断是否满足快乐数定义
* 5. 若未出现,则一直循环生成生成
* 6. 循环结束时判断是否满足条件
*/
public boolean isHappy(int n) {
HashSet<Integer> integers = new HashSet<>();
while (n != 1 && !integers.contains(n)){
integers.add(n);
n = getNext(n);
}
return n == 1;
}
/**
* 给定一个数字n 计算对各位数求平方和的值
* @param n
* @return
*/
public int getNext(int n){
int total = 0;
while (n > 0){
int d = n % 10;
total += d * d;
n = n / 10;
}
return total;
}
}
本文摘自 :https://www.cnblogs.com/