202:快樂數
編寫一個算法來判斷一個數是不是“快樂數”。
一個“快樂數”定義爲:對於一個正整數,每一次將該數替換爲它每個位置上的數字的平方和,然後重複這個過程直到這個數變爲 1,也可能是無限循環但始終變不到 1。如果可以變爲 1,那麼這個數就是快樂數。
示例:
問題分析:題目定義了一個快樂數,取每個位置上的數字,進行平方之和,重複該過程,如果可以變爲1則爲快樂書。
一個數是不是快樂數看它經過計算是否變爲一,但是計算的次數不確定,所以我這裏採用雙指針的方法,一個快指針,一個慢指針。慢指針裏存的是執行計算前的數字,快指針裏存的是執行後的數字,兩者是否相等作爲while的循環條件。拿到一個數判斷它是不是快樂數,肯定是要運算的,兩個指針兩個數進行比較,如果不相同就接着循環,如果相同就判斷它是否等於1,接着返回結果。
代碼實現:
class Solution {
public boolean isHappy(int n) {
//快指針存放計算後的數,滿指針存放計算前的數
int slow=happyNum(n);
int fast=happyNum(happyNum(n));
while(slow!=fast){//兩個數字不相等則分別在進行一次運算然後賦值
slow=happyNum(slow);
fast=happyNum(happyNum(fast));
}
return slow==1; //判斷是否快樂
}
//創建一個求將各個位置的數字平方之和的方法
private int happyNum(int n){
int sum=0;
while(n!=0){
int b=n%10;
sum=sum+b*b;
n=n/10;
}
return sum;
}
}