【夜深人静学数据结构与算法 | 第十一篇】枚举算法

这篇具有很好参考价值的文章主要介绍了【夜深人静学数据结构与算法 | 第十一篇】枚举算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【夜深人静学数据结构与算法 | 第十一篇】枚举算法,【夜深人静学数据结构与算法】,算法,开发语言,学习

目录

前言:

枚举算法:

优点:

枚举算法的种类:

枚举算法案例:

343. 整数拆分 - 力扣(LeetCode)

12. 整数转罗马数字 - 力扣(LeetCode)

总结:


前言:

本文我们将为大家介绍什么是枚举算法,以及枚举算法的优点,在后面我们也会为大家讲解几道枚举算法的经典例题,各位感兴趣的可以点击进来进行阅读。

枚举算法:

枚举算法也称为穷举算法,是一种基本的计算机算法。该算法的基本思想是列举出所有可能的情况,并一一进行考虑和判断,最终得出正确的答案。 

枚举算法的步骤通常如下:
1. 确定问题的解空间,即问题的所有可能解的集合;
2. 枚举解空间中所有可能的解;
3. 对于每个解,判断其是否符合问题的要求;
4. 最终得出所求的答案,即符合问题要求的解。

枚举算法的优点在于其思路简单,易于理解和实现。但是,由于其需要遍历所有可能的解,因此它的计算量较大,对于规模较大的问题,枚举算法的效率会比较低。

在实际应用中,枚举算法通常用于解决一些简单的问题,如求解一个方程的整数解、求解最大公约数和最小公倍数等。除此之外,枚举算法也可以作为其他算法(如贪心算法、动态规划算法等)的子算法,用于求解一些复杂问题。

下面我们以求解一个整数数组的最大值为例来介绍枚举算法的思路:

假设我们有一个长度为 n 的整数数组,我们要找到其中的最大值。最朴素的方法就是遍历数组中的所有元素,依次比较得到最大值。具体思路如下:

  1. 假设数组中第一个元素为最大值 max。

  2. 遍历数组中的所有元素,对于每个元素,与 max 进行比较,若当前元素比 max 大,则更新 max 的值。

  3. 遍历结束后,max 的值即为数组最大值。

该算法的实现方式非常简单,以下是一个代码示例:

int max = arr[0];
for (int i = 1; i < n; i++) {
    if (arr[i] > max) {
        max = arr[i];
    }
}

该算法的时间复杂度为 O(n),因为需要遍历整个数组,与数组大小 n 成正比。这种算法通常适用于数据规模较小的情况下。若数据规模较大时,该算法的时间复杂度会变得非常高,这时相应地需要使用更为高效的算法。

总的来说,枚举算法虽然简单,但具有一定的局限性。在实际应用中,需要根据具体问题选择合适的算法,以满足问题求解的要求。

其实枚举算法的核心思想很简单,暴力求解出所有问题的答案,然后根据需求确定返回值就可以了。

优点:

1. 思路简单,易于理解和实现:枚举算法的基本思想是列举出所有可能的情况,并一一进行考虑和判断,这个过程比较直观,容易理解。

2. 适用范围广泛:枚举算法适用于解决各种类型的问题,不论是数值计算、图论、字符串等方面,都可以使用枚举算法来解决。

3. 可以保证求解结果的正确性:由于枚举算法会穷举所有可能的解,因此可以保证其求解结果是正确的,而不会产生遗漏的情况。

4. 实现复杂度低:相对于其他更为高级的算法,如动态规划、贪心算法等,枚举算法的实现复杂度要比较低,因为不需要进行过于复杂的优化。

5. 可以用来验证其他算法的正确性:由于枚举算法能够保证结果正确,因此可以用来和复杂度更高的算法结果进行对比,以验证这些算法的正确性。

总的来说,枚举算法虽然存在一些明显的缺点(如计算量大),但其简单易懂、适用范围广泛和保证结果正确性等优点,使得枚举算法在解决某些问题时,仍然是一种非常有用的算法。

枚举算法的种类:

1. 完全枚举:

完全枚举算法,即穷尽所有可能性,在所有情况下依次判断,求出满足要求的正确答案。这种算法看似简单,但由于它的时间复杂度通常比较高,因此对于较大的问题规模,完全枚举的效率会比较低。

完全枚举算法往往适用于解决规模较小的问题,如求解一个方程的整数解、求解最大公约数和最小公倍数等。

2. 部分枚举:

部分枚举算法,即不完全地枚举解空间,只考虑一部分情况或减少某些非必须分支路径,以提高计算效率。部分枚举算法的时间复杂度通常比完全枚举算法低,因此在处理复杂问题时较为常见。

例如,对于实现图像处理算法,可以使用部分枚举来优化处理效率。例如,可以先检查图像中是否存在某些既定的特征(比如颜色、亮度等方面),然后只需对这些区域进行进一步处理,从而减少完成整个图像处理的计算量。

枚举算法案例:

343. 整数拆分 - 力扣(LeetCode)

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

【夜深人静学数据结构与算法 | 第十一篇】枚举算法,【夜深人静学数据结构与算法】,算法,开发语言,学习

这道题本质上是一个动态规划解决的题,我们在力扣刷题篇中遇到过,也基于动态规划思路作了详细的讲解做了详细的讲解:

【力扣刷题 | 第十五天】_我是一盘牛肉的博客-CSDN博客

【夜深人静学数据结构与算法 | 第十一篇】枚举算法,【夜深人静学数据结构与算法】,算法,开发语言,学习但其实我们根据这个提示来讲,n只有58,也就是只有58种结果,那麽我们直接枚举就可以了。

class Solution {
    public int integerBreak(int n) {
        if (n == 2) return 1;
        else if (n == 3) return 2;
        else if (n == 4) return 4;
        else if (n == 5) return 6;
        else if (n == 6) return 9;
        else if (n == 7) return 12;
        else if (n == 8) return 18;
        else if (n == 9) return 27;
        else if (n == 10) return 36;
        else if (n == 11) return 54;
        else if (n == 12) return 81;
        else if (n == 13) return 108;
        else if (n == 14) return 162;
        else if (n == 15) return 243;
        else if (n == 16) return 324;
        else if (n == 17) return 486;
        else if (n == 18) return 729;
        else if (n == 19) return 972;
        else if (n == 20) return 1458;
        else if (n == 21) return 2187;
        else if (n == 22) return 2916;
        else if (n == 23) return 4374;
        else if (n == 24) return 6561;
        else if (n == 25) return 8748;
        else if (n == 26) return 13122;
        else if (n == 27) return 19683;
        else if (n == 28) return 26244;
        else if (n == 29) return 39366;
        else if (n == 30) return 59049;
        else if (n == 31) return 78732;
        else if (n == 32) return 118098;
        else if (n == 33) return 177147;
        else if (n == 34) return 236196;
        else if (n == 35) return 354294;
        else if (n == 36) return 531441;
        else if (n == 37) return 708588;
        else if (n == 38) return 1062882;
        else if (n == 39) return 1594323;
        else if (n == 40) return 2125764;
        else if (n == 41) return 3188646;
        else if (n == 42) return 4782969;
        else if (n == 43) return 6377292;
        else if (n == 44) return 9565938;
        else if (n == 45) return 14348907;
        else if (n == 46) return 19131876;
        else if (n == 47) return 28697814;
        else if (n == 48) return 43046721;
        else if (n == 49) return 57395628;
        else if (n == 50) return 86093442;
        else if (n == 51) return 129140163;
        else if (n == 52) return 172186884;
        else if (n == 53) return 258280326;
        else if (n == 54) return 387420489;
        else if (n == 55) return 516560652;
        else if (n == 56) return 774840978;
        else if (n == 57) return 1162261467;
        else return 1549681956;
    }
}

12. 整数转罗马数字 - 力扣(LeetCode)

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给你一个整数,将其转为罗马数字。

【夜深人静学数据结构与算法 | 第十一篇】枚举算法,【夜深人静学数据结构与算法】,算法,开发语言,学习

 这道题我们用暴力枚举也可以做,虽然思路简单,但是代码太过于繁杂。

class Solution:
    def intToRoman(self, num: int) -> str:
        s=str(num)
        if num<4:
            return 'I'*num
        elif num==4:
            return 'IV'
        elif num<9:
            return 'V'+'I'*(num-5)
        elif num==9:
            return 'IX'
        #<39
        elif num<40:
            if s[1]=='4':
                return 'X'*(num//10)+'IV'
            elif s[1]=='9':
                return 'X'*(num//10)+'IX'
            elif int(s[1])<4:
                return 'X'*(num//10)+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'X'*(num//10)+'V'+'I'*(int(s[1])-5)
        #40-49
        elif num<50:
            if s[1]=='4':
                return 'XL'+'IV'
            elif s[1]=='9':
                return 'XL'+'IX'
            elif int(s[1])<4:
                return 'XL'+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'XL'+'V'+'I'*(int(s[1])-5)
        #50-89
        elif num<90:
            if s[1]=='4':
                return 'L'+'X'*((num-50)//10)+'IV'
            elif s[1]=='9':
                return 'L'+'X'*((num-50)//10)+'IX'
            elif int(s[1])<4:
                return 'L'+'X'*((num-50)//10)+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'L'+'X'*((num-50)//10)+'V'+'I'*(int(s[1])-5)
        #90-99
        elif num<100:
            if s[1]=='4':
                return 'XC'+'IV'
            elif s[1]=='9':
                return 'XC'+'IX'
            elif int(s[1])<4:
                return 'XC'+'I'*(int(s[1]))
            elif int(s[1])<9:
                return 'XC'+'V'+'I'*(int(s[1])-5)
        #100-399
        elif num<400:
            if s[1]=='4':
                if s[2]=='4':
                    return 'C'*(num//100)+'XL'+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'XL'+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'XL'+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'C'*(num//100)+'XC'+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'XC'+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'XC'+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'C'*(num//100)+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
        #400-499
        elif num<500:
            if s[1]=='4':
                if s[2]=='4':
                    return 'CD'+'XL'+'IV'
                elif s[2]=='9':
                    return 'CD'+'XL'+'IX'
                elif int(s[2])<4:
                    return 'CD'+'XL'+'I'*int(s[2])
                else:
                    return 'CD'+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'CD'+'XC'+'IV'
                elif s[2]=='9':
                    return 'CD'+'XC'+'IX'
                elif int(s[2])<4:
                    return 'CD'+'XC'+'I'*int(s[2])
                else:
                    return 'CD'+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'CD'+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'CD'+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'CD'+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'CD'+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'CD'+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
        # 500-899
        elif num<900:
            if s[1]=='4':
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
        # 900-999                    
        elif num<1000:
            if s[1]=='4':
                if s[2]=='4':
                    return 'CM'+'XL'+'IV'
                elif s[2]=='9':
                    return 'CM'+'XL'+'IX'
                elif int(s[2])<4:
                    return 'CM'+'XL'+'I'*int(s[2])
                else:
                    return 'CM'+'XL'+'V'+'I'*(int(s[2])-5)
            elif s[1]=='9':
                if s[2]=='4':
                    return 'CM'+'XC'+'IV'
                elif s[2]=='9':
                    return 'CM'+'XC'+'IX'
                elif int(s[2])<4:
                    return 'CM'+'XC'+'I'*int(s[2])
                else:
                    return 'CM'+'XC'+'V'+'I'*(int(s[2])-5)
            elif int(s[1])<4:
                if s[2]=='4':
                    return 'CM'+'X'*(int(s[1]))+'IV'
                elif s[2]=='9':
                    return 'CM'+'X'*(int(s[1]))+'IX'
                elif int(s[2])<4:
                    return 'CM'+'X'*(int(s[1]))+'I'*int(s[2])
                else:
                    return 'CM'+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)    
            else:
                if s[2]=='4':
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'IV'
                elif s[2]=='9':
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'IX'
                elif int(s[2])<4:
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
                else:
                    return 'CM'+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)                
        #1000-3999
        else:
            if s[1]=='4':
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)     
            elif s[1]=='9':
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)  
            elif int(s[1])<4:
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)  
            else:
                if s[2]=='4':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'V'+'I'*(int(s[3])-5)
                elif s[2]=='9':
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'V'+'I'*(int(s[3])-5)
                elif int(s[2])<4:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)    
                else:
                    if s[3]=='4':
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'IV'
                    if int(s[3])<4:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
                    if int(s[3])==9:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'IX'
                    else:
                        return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)  
                

总结:

枚举算法是一种简单的算法思想,它利用结果数量少,以此列举出所有的结果,再根据需求返回值,缺点相信大家通过两道例题也可以看出来:代码过于繁杂,但确实是一种淳朴的算法思想。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

【夜深人静学数据结构与算法 | 第十一篇】枚举算法,【夜深人静学数据结构与算法】,算法,开发语言,学习文章来源地址https://www.toymoban.com/news/detail-542832.html

到了这里,关于【夜深人静学数据结构与算法 | 第十一篇】枚举算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【夜深人静学数据结构与算法 | 第一篇】KMP算法

    目录  前言:  KMP算法简介: 引入概念: 前缀后缀 前缀表: 简单例子: 暴力遍历: KMP算法:​  KMP算法难点: 总结: 本篇我们将详细的从理论层面介绍一下什么是KMP算法,相对应的力扣刷题专栏里也会有相对应的习题,欢迎各位前往阅读。           KMP算法是一种字符

    2024年02月08日
    浏览(70)
  • 【夜深人静学数据结构与算法 | 第三篇】 二叉树

    目录  前言:  二叉树: 二叉树的种类:  二叉树的存储方式: 1. 链式存储 2. 数组存储 二叉树的遍历方式 深度优先遍历 广度优先遍历 总结: 本文将会详细的介绍各种常见的树以及相对应的概念,存储方式,遍历方式。树是经典的数据结构,因此我们虽然不能做到手撕各

    2024年02月11日
    浏览(50)
  • 【夜深人静学数据结构与算法 | 第九篇】栈与队列

    目录 ​前言: 栈: 栈的实际应用:  队列: 队列的实际应用: 总结:         栈与队列是我们学习的两个经典的数据结构,这两个数据结构应用广泛,在计算机内有很多底层应用,而很多算法也是依靠栈和队列来实现的,因此我们要想学好数据结构与算法,就要学好栈与

    2024年02月15日
    浏览(45)
  • 【夜深人静学数据结构与算法 | 第二篇】后缀(逆波兰)表达式

    目录 前言:  中缀表达式:  后缀表达式: 中缀表达式转后缀表达式: 后缀表达式计算结果: 总结:  计算机在计算四则运算的时候,由于括号以及运算优先级的存在,并不能够很好的处理所有的运算,为了处理这种情况,我们引入了后缀表达式来优化算法。         

    2024年02月13日
    浏览(58)
  • 【夜深人静学数据结构与算法 | 第四篇】手撕二叉树遍历

    目录 前言: 二叉树遍历方式: 手撕前中后序遍历(递归)的三大准备 深度优先搜索:  手撕前中后遍历(递归): 手撕前中后序遍历(迭代): 深度优先搜索: 总结:         今天我们将带领大家手撕二叉树的遍历,本篇会分别讲解深度优先搜索法和广度优先有搜索法下

    2024年02月09日
    浏览(50)
  • 【夜深人静学数据结构与算法 | 第七篇】时间复杂度与空间复杂度

    前言:  引入:  时间复杂度:  案例: 空间复杂度: 案例: TIPS:        总结:         今天我们将来介绍时间复杂度和空间复杂度,我们代码的优劣就是依靠这个在评判,以此为背景,我们诞生出了不少的经典思路:用时间换空间,用空间换取时间。而大多数同学

    2024年02月10日
    浏览(67)
  • 夜深人静学32系列10——GPIO中断/NVIC/EXTI/SYSCFG详解,外部中断控制LED

    上期我们学习了GPIO驱动数码管/蜂鸣器/LED和按键等外设,本期我们一起来学习STM32中断的相关内容 当CPU正在处理某个事件的时候,外界发生了紧急事件请求,CPU需要暂停当前的工作,转而去处理这个紧急事件,处理完之后,再次回到之前被中断的地方,继续执行原来的工作,

    2024年01月16日
    浏览(51)
  • 数据结构作业—第十三周---- Prim算法 Kruskal算法 Dijkstra算法

    (只看点,不看边,适合边较多的图,即 稠密图 )       是一种按权值的递增次序选择合适的边来构造最小生成树的方法;( 稀疏图 ) 适合带权有向图和带权无向图求单源最短路径; 不适合含负取值的图,求最短路径; 1 . 单选题 简单 7分 对于有n个顶点的带权连通图

    2024年02月15日
    浏览(46)
  • 【数据结构入门精讲 | 第十七篇】一文讲清图及各类图算法

    在上一篇中我们进行了的并查集相关练习,在这一篇中我们将学习图的知识点。 下面介绍几种在对图操作时常用的算法。 深度优先搜索(DFS)是一种用于遍历或搜索树、图等数据结构的基本算法。该算法从给定的起点开始,沿着一条路径直到达到最深的节点,然后再回溯到

    2024年02月03日
    浏览(48)
  • 数据结构第十一弹---堆

    堆就是以二叉树的顺序存储方式来存储元素,同时又要满足父亲结点存储数据都要 大于等于 儿子结点存储数据(也可以是父亲结点数据都要 小于等于 儿子结点数据)的一种数据结构。堆只有两种即 大堆和小堆 , 大堆就是父亲结点数据大于等于儿子结点数据,小堆则反之。

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包