【递归】算法题整理(持更)

  1. 【递归全排列】
    题目描述
    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
    输入描述:
    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

分析:字符串全排列实现过程:
固定第i个字符为首位,将剩下的第0i-1以及i+1len(string)个字符串进行全排列,这一步就是通过递归实现。然后与第i个字符相加,即可得到以第i个字符为首位的全排列。按照顺便遍历固定所有字符即可得到字符串的全排列。

class Solution:
    def Permutation(self, ss):
        # write code here
        l = len(ss)
        res = set()
        # 如果字符串小于2,直接输出即可
        if l<2:
            return ss
        for i in range(l):
            for j in self.Permutation(ss[:i]+ss[i+1:]):
                res.add(ss[i]+j)
        return sorted(res)
  1. 【斐波那契数列】
    题目描述
    我们可以用2*1小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
    比如n=3时,2*3的矩形块有3种覆盖方法:
    在这里插入图片描述

分析:假设现在有n-1个小矩形,现在要加一块,那么这块小矩形要么竖着方,有f(n-1)种方法,要么横着方(横着方有上下两块),有f(n-2)种方法。所以有n块小矩形时,一共有f(n)=f(n-1)+f(n-2)种方法。

class Solution:
    def rectCover(self, number):
        # write code here
        f1 = 1
        f2 = 2
        if number <= 2:
            return number
        for i in range(number-1):
            f1, f2 = f2, f1+f2
        return f1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值