算法题:Climbing Stairs 爬楼梯问题

LeetCode的第70题:https://leetcode.com/problems/climbing-stairs/description/

该题在Solution中囊括了六种解法,包括从暴力破解到斐波那契以及算法优化。

这里新增一种思路:组合数

爬楼梯问题,也就是1步、2步的走最终到达终点。

可以抽象成取n个球,可以一次取两个,也可以一次取一个,直到最终取完,共有多少取法。

从1个2和(n-2)个1 …… 到n/2个2和(n-n/2)个1的排列组合数总和,代码如下

class Solution(object):
    def climbStairs(self, n):
        count = 0
        for i in xrange(0, n//2+1):
             count += self.cni(n-i, i)
        return count

    def cni(self,n,i):
        result = 1
        for j in range(0, i):
            result = result * (n-j) // (j+1)
        return result

空间复杂度O(1),时间复杂度O(n^2),不如斐波那契简便

你可能感兴趣的:(算法)