編寫一個算法來判斷一個數 n 是不是快樂數

題目描述

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

如果 n 是快樂數就返回 True ;不是,則返回 False 。

示例:

輸入:19
輸出:true
解釋:
12+92=8282+22=6862+82=10012+02+02=1 1^2 + 9^2 = 82 \\ 8^2 + 2^2 = 68 \\ 6^2 + 8^2 = 100 \\ 1^2 + 0^2 + 0^2 = 1
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/happy-number

思路

可以用快慢指針的思想來解決這個問題,快指針每次計算兩次;慢指針計算一次;當它們相遇時,判斷是否是因爲等於1而相遇即可。

在這裏插入圖片描述
(圖片來自https://leetcode-cn.com/problems/happy-number/solution/ji-xu-gao-dui-xiang-by-shetia/)

代碼

以後儘量用Python來做題了,增加Python熟練度。

class Solution(object):


    def isHappy(self, n):
        """
        使用快慢指針,快指針每次計算兩次;慢指針計算一次;當它們相遇時,判斷是否是因爲等於1而相遇即可。
        :type n: int
        :rtype: bool
        """
        def cal_sum(n):
            total = 0
            while n != 0:
                total += (n % 10) ** 2
                n = n / 10
            return total

        slow = cal_sum(n)
        fast = cal_sum(slow)
        while fast != 1 and slow != fast: # fast == 1 直接跳出循環,不要等待slow了
            slow = cal_sum(slow)
            fast = cal_sum(cal_sum(fast))
        
        return fast == 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章