題目描述:編寫一個算法來判斷一個數(shù) n 是不是快樂數(shù)。
「快樂數(shù)」定義為:
- 對于一個正整數(shù),每一次將該數(shù)替換為它每個位置上的數(shù)字的平方和桥爽。
- 然后重復這個過程直到這個數(shù)變?yōu)?1,也可能是 無限循環(huán) 但始終變不到 1钠四。
- 如果 可以變?yōu)?1,那么這個數(shù)就是快樂數(shù)缀去。
如果 n 是快樂數(shù)就返回 true ;不是缕碎,則返回 false 。
示例 1:
輸入:n = 19
輸出:true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:
輸入:n = 2
輸出:false
提示:
1 <= n <= 2^31 - 1
相關(guān)標簽:哈希表
凡怎、數(shù)學
、雙指針
解析:要確定一個數(shù)是不是快樂數(shù)统倒,需要進行的循環(huán)次數(shù)是不可知的氛雪,但是只要最后結(jié)果是1,就是快樂數(shù)报亩,那么這就是一個循環(huán)結(jié)束的條件。
public boolean isHappy(int n) {
//如果n是1捆昏,直接返回
if(n==1){
return true;
}
//每次變化的最終結(jié)果
int res = n;
//變化過程的中間變量
int tem = 0;
//接收所有的最終結(jié)果,如果有重復的宠页。說明進入死循環(huán)
ArrayList<Integer> list = new ArrayList<>();
//添加初始值n
list.add(n);
//死循環(huán)求出所有可能
while (true){
//這個循環(huán)用來求出res的每個位置上的平方和
while (res!=0){
tem = tem + (res % 10) * (res % 10);
res = res / 10;
}
//如果重復了左胞,直接返回false
if(list.contains(tem)){
return false;
}
//不重復則添加
list.add(tem);
//轉(zhuǎn)換變量
res = tem;
tem = 0;
//如果是1烤宙,就是快樂數(shù)
if(res == 1){
return true;
}
//如果循環(huán)到了最大整數(shù)閾值,返回false
if(res == Integer.MAX_VALUE){
return false;
}
}
}
快樂數(shù)躺枕,今天你快樂了嗎供填?
做一道光吧拐云,亮的時候就福澤四方叉瘩,暗的時候就惠及身旁!