leetcode202

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章