有关看起来相似的两个代码的效率的问题

时间:2019-02-25 22:03:21

标签: python algorithm

以下是问题“美丽的布置”(LeetCode 526)和该问题的两段代码。代码1和代码2对我来说看起来相同,但是我不明白为什么代码1比代码2花费更多的时间。有人可以帮我找出原因吗?预先感谢!

问题: 假设您有N个从1到N的整数。如果此数组中的第i个位置(1 <= i <= N)满足以下条件之一,则将美好的排列定义为由这N个数字成功构建的数组:

第i个位置的数字可被i整除。 我可以被第i个位置的数字整除。

现在给定N,您可以构造多少个漂亮的布置?

代码1:

def countArrangement(self, N: int) -> int:

    def dfs(cur,N,seen):
        if cur==N:
            return 1
        res = 0
        for i in seen:
            if (cur+1)%i==0 or i%(cur+1)==0:
                res += dfs(cur+1,N,seen-{i})
        return res
    seen = set(range(1,N+1))
    return dfs(0,N,seen)

代码2:

def countArrangement(self, N: int) -> int:

def count(i,X):
    if i==1: return 1
    return sum(count(i-1,X-{x}) for x in X if i%x==0 or x%i==0)
return count(N,set(range(1,N+1)))

0 个答案:

没有答案