package com.mxnet;
import java.util.HashSet;
public class Solution202 {
public static void main(String[] args) {
}
/**
* 編寫一個(gè)算法來(lái)判斷一個(gè)數(shù) n 是不是快樂(lè)數(shù)。
*
* 「快樂(lè)數(shù)」?定義為:
* 對(duì)于一個(gè)正整數(shù),每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和。
* 然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1,也可能是 無(wú)限循環(huán) 但始終變不到 1。
* 如果這個(gè)過(guò)程 結(jié)果為?1,那么這個(gè)數(shù)就是快樂(lè)數(shù)。
* 如果 n 是 快樂(lè)數(shù) 就返回 true ;不是,則返回 false 。
* @param n
* @return
* 思路:
* 1. 使用hash結(jié)構(gòu)判斷在生成下一個(gè)數(shù)的時(shí)候是否出現(xiàn)循環(huán)
* 2. 首先使用一個(gè)函數(shù)計(jì)算改數(shù)的每個(gè)位置的平方和
* 3. 在循環(huán)生成下一個(gè)數(shù)的時(shí)候判斷是否出現(xiàn)循環(huán)
* 4. 若出現(xiàn) 則停止,并判斷是否滿足快樂(lè)數(shù)定義
* 5. 若未出現(xiàn),則一直循環(huán)生成生成
* 6. 循環(huán)結(jié)束時(shí)判斷是否滿足條件
*/
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;
}
/**
* 給定一個(gè)數(shù)字n 計(jì)算對(duì)各位數(shù)求平方和的值
* @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/