leetcode刷題--Happy Number

黃思喆發表於2015-05-17

求一個數是否是快樂數。所謂快樂數指該數字所有數位(digits)的平方和,得到的新數再次求所有數位的平方和,如此重複進行,最終結果必為1。

思路:不用看平方和為1時返回True,但是如何才能停止程式返回False呢?有個辦法就是當出現第二次一個平方和的結果時我們可以知道結果是個迴圈,那就可以判定為false了。 一般解法如下:

class Solution:
    # @param {integer} n
    # @return {boolean}
    def find(self,n,reset):
        re=0
        m=n
        while(1):
            if m/10>0: 
                i=m%10
                re += i*i
                m=m/10
            else:
                re += m*m
                break
        if re == 1:
            return True
        elif re in reset:
            return False
        else:
            reset.add(re)
            return self.find(re,reset)  

    def isHappy(self, n):
        reset=set()
        return self.find(n,reset)

當然也可以利用python字串數字轉化的方法討巧下:

class Solution:
    # @param {integer} n
    # @return {boolean}
    def find(self,n,reset):
        re=0
        m=n
        for i in str(n):re += int(i)*int(i)
        if re == 1:return True
        elif re in reset:return False
        else:
            reset.add(re)
            return self.find(re,reset)  

    def isHappy(self, n):
        reset=set()
        return self.find(n,reset)

相關文章