202. 快樂(lè)數(shù)(Python)

題目

難度:★☆☆☆☆
類(lèi)型:數(shù)學(xué)

編寫(xiě)一個(gè)算法來(lái)判斷一個(gè)數(shù)是不是“快樂(lè)數(shù)”。

一個(gè)“快樂(lè)數(shù)”定義為:對(duì)于一個(gè)正整數(shù),每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和,然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1,也可能是無(wú)限循環(huán)但始終變不到 1。如果可以變?yōu)?1,那么這個(gè)數(shù)就是快樂(lè)數(shù)。

示例

輸入: 19
輸出: true
解釋:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

解答

這道題很簡(jiǎn)單,根據(jù)定義進(jìn)行編碼即可,我們構(gòu)建了求取各位平方和的子函數(shù)get_bit_square(n),會(huì)返回輸入數(shù)字每一位的平方和,循環(huán)迭代地計(jì)算每一次輸出的各位平方和,如果出現(xiàn)1,則輸入數(shù)字是快樂(lè)數(shù),此外,我們用一個(gè)臨時(shí)列表sq記錄已經(jīng)出現(xiàn)過(guò)的各位平方和,查看每次計(jì)算出各位平方和是否在列表中出現(xiàn)過(guò),若出現(xiàn)過(guò),則之后的計(jì)算會(huì)循環(huán)下去,無(wú)法得到各位平方和為1的結(jié)果,不是快樂(lè)數(shù)。

class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        def get_bit_square(n):
            """
            計(jì)算各位平方和
            :param n: 
            :return: 
            """
            s = 0
            while n:
                r, n = n % 10, n // 10
                s += pow(r, 2)
            return s

        sq = []                             # 用于暫存每一步的各位平方和
        while True:                         # 死循環(huán)
            if n == 1:                      # 如果遇到各位平方和為1,則是快樂(lè)數(shù)
                return True

            n = get_bit_square(n)           # 計(jì)算下一個(gè)各位平方和
            if n in sq:                     # 如果計(jì)算結(jié)果在之前的記錄中存在過(guò)
                return False                # 說(shuō)明一定會(huì)繼續(xù)循環(huán)下去,不是快樂(lè)數(shù)
            sq.append(n)                    # 否則添加到臨時(shí)列表中

如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容