欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-11 21:28:58
...
  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
相关标签: 算法

上一篇: java金额计算归整

下一篇: