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

目录

前言:

枚举算法:

优点:

枚举算法的种类:

枚举算法案例:

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)  
                

总结:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33485.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【手撕算法|动态规划系列No.1】leetcode1137. 第 N 个泰波那契数

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

exe的python文件打包

【步骤01】 【在命令行中用pip工具安装Pyinstaller模块】 pip install Pyinstaller 步骤02】 【切换命令行的路径到你要打包的Python源文件的文件夹路径下】 【下面是我要打包的Python源文件&#xff08;散点坐标图.py&#xff09;及其文件夹路径】 【步骤03】 【执行Pyi…

使用SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 转载自cpolar极点云文章&#xff1a;SSH远程直连Docker容器 在某些特殊需求下,我们想ssh直接远程连接docker 容器…

SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

文章目录 1. 环境准备1. 查询全部2. 根据 name 查询 match 分词查询3. 根据 name 和 品牌查询 multiMatch 分词查询4. 根据 brand 查询 match 分词查询5. 按照价格 范围查询6. 精确查询7. boolQuery8. 分页9. 高亮查询9. 公共解析 上一节讲述了 SpringBoot 实现 elasticsearch …

【图像处理OpenCV(C++版)】——5.3 图像平滑之均值平滑(滤波)

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

Linux终端与进程的关系 ( 1 ) -【Linux通信架构系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

C高级重点

1、请简要描述一下Linux文件系统的层级结构&#xff0c;包括不同目录的作用和功能。 Linux的文件系统结构是一个倒插树结构&#xff0c;所有的文件都从根目录出发。 2、find指令的用途 find 查找的路径 -name 文件名 ----->在指定路径下&#xff0c;以文件名为条件查找文…

总结vue3 的一些知识点:​Vue3 起步

目录 引言 Vue3 混入 实例 选项合并 实例 实例 全局混入 实例 Vue3 起步 Vue 3.0 实例 data 选项 实例 方法 总结 引言 Vue 进阶系列教程将在本号持续发布&#xff0c;一起查漏补缺学个痛快&#xff01;若您有遇到其它相关问题&#xff0c;非常欢迎在评论中留言讨…

Ubuntu 20.04.02 LTS安装virtualbox7.0

ubuntu22.04的软件仓库也有virtualbox&#xff0c;不过版本较老。 使用安装命令&#xff1a;sudo apt install virtualbox 如果想要安装最新版&#xff0c;那么需要去官网下载deb包或者使用官方的仓库。 这里采用安装Oracle官方仓库的方法。 执行如下命令&#xff1a; wge…

HTTP调用:你考虑到超时、重试、并发了吗?

今天&#xff0c;我们一起聊聊进行 HTTP 调用需要注意的超时、重试、并发等问题。 与执行本地方法不同&#xff0c;进行 HTTP 调用本质上是通过 HTTP 协议进行一次网络请求。网络请求必然有超时的可能性&#xff0c;因此我们必须考虑到这三点&#xff1a; 首先&#xff0c;框架…

抖音本地生活团购服务商

抖音本地生活团购服务商市场前景非常广阔。随着移动互联网的普及和人们对本地生活服务需求的增加&#xff0c;本地生活团购行业已成为一个快速增长的市场。而抖音平台拥有庞大的用户基础和强大的社交媒体传播力&#xff0c;为本地生活团购服务商提供了巨大的发展机遇。 抖音…

【博客674】警惕Prometheus 中的重复样本和无序时间戳错误

警惕Prometheus 中的重复样本和无序时间戳错误 1、场景 您的 Prometheus 服务器日志中是否遇到过以下错误&#xff1f; "Error on ingesting out-of-order samples" "Error on ingesting samples with different value but same timestamp" "dupli…

图解CNN中的卷积(卷积运算、池化、Padding、多通道的卷积)

文章目录 卷积操作池化Padding对多通道&#xff08;channels&#xff09;图片的卷积套上激活函数是什么样的参考&#xff1a; 卷积层是深度学习神经网络中经常使用的一种层。它通过卷积运算来提取输入的特征&#xff0c;常用于图像、语音等信号处理任务中。 卷积层有以下几个参…

探索iOS之Metal编程指南

iOS推出Metal渲染库为了取代OpenGL。Metal有自己的Shader语言&#xff0c;渲染效率比OpenGL高。在这里我们一起探索&#xff1a;Metal使用C限制、预处理定义、动态链接配置、GPU编译配置、设备坐标系、视口坐标系、纹理坐标系、矢量类型、矩阵类型、采样器状态、矩阵相乘。 1、…

第 107 场LeetCode双周赛

A 最大字符串配对数目 显然各字符串对 间匹配的先后顺序不影响最大匹配数目, 可以从后往前遍历数组, 判断前面是否有和当前末尾构成匹配的. class Solution { public:int maximumNumberOfStringPairs(vector<string> &words) {int res 0; while (words.size…

使用 Jetpack Compose 构建 RadioButton

欢迎阅读本篇关于使用 Jetpack Compose 构建 RadioButton&#xff08;单选按钮&#xff09;的博客。Jetpack Compose 是 Google 发布的现代化 UI 工具包&#xff0c;用于构建 Android 界面。它的声明式设计使得 UI 开发更加简洁直观。 一、什么是 RadioButton&#xff1f; Rad…

【深度学习】3-4 神经网络的学习- 学习算法的实现

神经网络的学习步骤如下所示&#xff1a; 步骤1(mini-batch) 从训练数据中随机选出一部分数据&#xff0c;目标是减小mini-batch的损失函数的值 步骤2(计算梯度) 为了减小mini-batch的损失函数的值&#xff0c;需要求出各个权重参数的梯度 步骤3(更新参数) 将权重参数沿梯度…

ModaHub魔搭社区:向量数据库MIlvus服务端配置(四)

目录 常见问题 常见问题 除了配置文件外&#xff0c;怎样可以判断我确实在使用 GPU 做搜索&#xff1f; 有以下三种方式&#xff1a; 使用 nvidia-smi 命令查看 GPU 使用情况。用 Prometheus 配置&#xff0c;详见 使用 Grafana 展示监控指标 > 系统运行指标。使用 Milv…

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

制造企业实施MES系统受到的影响因素有哪些?

实施MES系统会遇到哪些影响因素&#xff1f;或者说企业实施MES系统的交付率为什么低&#xff1f; 我觉得关键点在于&#xff1a;在当前MES产品化程度普遍不高的大环境下&#xff0c;对项目及管理软件本身认知过于简单&#xff0c;且缺失有经验行业人才&#xff0c;是当前大部分…