python 类内函数互调的两种用法

来源:互联网 发布:java变成学到什么程度 编辑:程序博客网 时间:2024/06/01 10:51

以leetcode 279题 Perfect Squares为例

题目:

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.
For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.
我们根据Legendre's three-square theorem(https://en.wikipedia.org/wiki/Legendre%27s_three-square_theorem)解答

第一种:

    在之前加类名:

  class Solution(object):
    import math
    def is_square(self,n):
        s=int(math.sqrt(n))
        return s*s==n


    def numSquares(self, n):
        """
        :type n: int
        :rtype: int
        """
        if Solution.is_square(self,n)==True:
            return 1
        while n%4==0:
            n=n/4
        if n%8==7:
            return 4
        i=1
        while i*i<n:
            if Solution.is_square(self,n-i*i)==True:
                return 2
            i+=1
        return 3

   用时52ms,其中is_square函数的定义和调用参数都有self

第二种,之前加self:

class Solution(object):
    import math
    def is_square(self,n):
        s=int(math.sqrt(n))
        return s*s==n
    def numSquares(self, n):
        """
        :type n: int
        :rtype: int
        """
        if self.is_square(n)==True:
            return 1
        while n%4==0:
            n=n/4
        if n%8==7:
            return 4
        i=1
        while i*i<n:
            if self.is_square(n-i*i)==True:
                return 2
            i+=1
        return 3

用时39ms  

原创粉丝点击