算法-用快慢指針解決循環問題

一個“快樂數”定義爲:對於一個正整數,每一次將該數替換爲它每個位置上的數字的平方和,然後重複這個過程直到這個數變爲 1,也可能是無限循環但始終變不到 1。如果可以變爲 1,那麼這個數就是快樂數。

示例: 

輸入: 19
輸出: true
解釋: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

 

class Solution {
public:

    int squreSum(int n) {
        int sum = 0;
        while(n > 0) {
            int a = n % 10;
            sum += a * a;
            n = n / 10;
        }
        return sum;
    }


    bool isHappy(int n) {
        int fast = n, slow = n;
        do {
            slow = squreSum(slow);
            fast = squreSum(fast);
            fast = squreSum(fast);
        } while(slow != fast);
        return slow == 1;
    }
};

 

發佈了37 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章