題目
描述
寫一個(gè)算法來判斷一個(gè)數(shù)是不是"快樂數(shù)"。
一個(gè)數(shù)是不是快樂是這么定義的:對于一個(gè)正整數(shù)妨马,每一次將該數(shù)替換為他每個(gè)位置上的數(shù)字的平方和,然后重復(fù)這個(gè)過程直到這個(gè)數(shù)變?yōu)?,或是無限循環(huán)但始終變不到1弟翘。如果可以變?yōu)?,那么這個(gè)數(shù)就是快樂數(shù)骄酗。
樣例
19 就是一個(gè)快樂數(shù)稀余。
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
解答
思路
- 計(jì)算過程中的數(shù)字都存在Set中,如果后續(xù)計(jì)算出現(xiàn)了Set中的數(shù)趋翻,說明陷入循環(huán)睛琳,那么該Set中的所有數(shù)都應(yīng)該不是快樂數(shù),當(dāng)然也包括輸入的數(shù)踏烙,返回false师骗;
- 直到計(jì)算出1,返回true讨惩;
代碼
public class Solution {
/**
* @param n an integer
* @return true if this is a happy number or false
*/
public boolean isHappy(int n) {
// Write your code here
Set<Integer> set = new HashSet<>();
int temp = 0;
Integer nn = new Integer(n);
while(nn != 1){
if(set.contains(nn)) return false;
set.add(nn);
temp = nn;
nn = 0;
while(temp != 0){
nn += (temp%10)*(temp%10);
temp = temp / 10;
}
}
return true;
}
}