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

news2024/10/6 17:18:01

目录

前言:

枚举算法:

优点:

枚举算法的种类:

枚举算法案例:

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)  
                

总结:

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

video-05-videojs编写(全屏、非全屏)自定义控件!!!!

兄弟们&#xff01;&#xff01;看到这里&#xff0c;你马上就可以自定义控件了&#xff0c;想想是不是都激动啊&#xff0c;但是这篇文章重在思路及简单实现&#xff0c;仔细看。 目录 一、控件分类 二、实现方案&#xff08;方案二最好&#xff09; 2.1 方案1&#xff08;…

前端Vue自定义轮播图swiper 轮播图dot 轮播图指示indicate

前端Vue自定义轮播图swiper 轮播图dot 轮播图指示indicate&#xff0c;下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13193 效果图如下: ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ​…

BACnet网关如何采集Modbus RTU设备转BACnet IP协议

BACnet标准是针对采暖、通风、空调、制冷控制设备设计的&#xff0c;同时也是为其他楼宇控制系统(例如照明&#xff0c;安保&#xff0c;消防等系统)的集成提供一个基本原则。 本文主要讲述了BACnet网关采集Modbus RTU设备&#xff08;M140T&#xff09;&#xff0c;将Modbus …

servlet拓展-统一响应json功能、全局异常处理

servlet拓展-统一响应json功能、全局异常处理 一、baseservlet import com.fasterxml.jackson.databind.ObjectMapper; import teamwork.com.utils.ApiResult;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.Htt…

解决IDEA连接数据库后,xml中写SQL语句不提醒数据库表字段问题

有时候我们新建了一个项目&#xff0c;或者新建了一个工程&#xff0c;明明为此项目或者工程连接了数据库&#xff0c;并且一切正确&#xff0c;但是在xml中书写SQL语句就是不提示数据库表中的相关字段&#xff0c;无论是表名也好&#xff0c;还是字段名也好&#xff0c;通通不…

信号链噪声分析15

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 模数转换器(ADC)将模拟量——现实世界中绝大部分现象的特征——转换为数字语言&#xff0c; 以便用于信息处理、计算、数据传输和控制系统。数模转换器(DAC)则用于将发送或存 储…

信号链噪声分析17

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 只是快速阅读 HarryNyquist 于 1924 年发表的《贝尔系统技术杂志》经典文章&#xff0c;并不 足以了解以其名字命名的该项准则的真正意义。当时&#xff0c;Nyquist 正致力于研…

解放双手,保障企业安全这一点很重要!

无论是交通管理部门、工业企业还是其他需要保障安全的场所&#xff0c;远程烟雾监控系统都是一个可靠的选择。 这远程烟雾监控是一项重要的技术解决方案&#xff0c;通过使用先进的传感器和监控系统来实时监测和管理烟雾情况&#xff0c;以提高安全性并及时应对潜在的风险。 客…

强化学习从基础到进阶–案例与实践[11]:AlphaStar论文解读、监督学习、强化学习、模仿学习、多智能体学习、消融实验

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

H5工具:产品生命周期四阶段及其重点关注数据指标

人有生老病死&#xff0c;同样&#xff0c;一个产品也有生命周期&#xff0c;叫产品生命周期&#xff08;Product Life Cycle&#xff09;。 产品生命周期指的是产品从进入市场到退出市场的周期性变化过程&#xff0c;它是指产品的市场寿命&#xff0c;而非产品的使用寿命。 一…

Linux自主学习 - C语言库Melon的快速入门

备注&#xff1a;ubuntu-20.04.3-desktop-amd64.iso 一、C语言库melon的安装 1、选择一个合适的文件夹用于下载Melon&#xff0c;本文以~/ProjectCode为例 在~/ProjectCode下输入git clone https://github.com/Water-Melon/Melon.git 然后&#xff0c;可以使用ls命令查看到Mel…

青大数据结构【2017】【简答】

关键字&#xff1a; 链式存储、顺序查找、折半查找、归并排序 采用链式存储结构&#xff0c;原因&#xff1a; 1&#xff09;链式存储结构进行插入和删除只需要修改相应的指针就可以了&#xff0c;适合频繁的进行插入和删除操作。 2&#xff09;链式存储不要求地址连续&…

VUE elementUI 自定义组件效验器失效

首先看一段源码 只要给el-form-item 设置了prop&#xff0c;并且model有prop属性&#xff0c;根据此计算属性就会触发fieldValue的取值&#xff0c;从而使效验生效&#xff0c;也就是说&#xff0c;初始化属性一定得写。 其次可以利用手动触发效验的方法灵活控制。如下所示 v…

Learn Mongodb DB常用命令及数据导入导出 ⑥

@作者 : SYFStrive @博客首页 : HomePage 📜: PHP MYSQL 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 👉:

Java中的可变参数

文章目录 可变参数概要可变参数例题可变参数的细节 可变参数概要 看到有道题&#xff0c;让你求出n个数的和&#xff0c;那么这个时候就可以使用Java中的可变参数来做。 格式&#xff1a; 数据类型...参数名 例如&#xff1a; int...args 其实可变参数的本质就是一个数组&…

Linux进程信号【信号处理】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、信号的处理时机1.1、处理情况1.2、"合适" 的时机 2、用户态与内…

逆向(异或)

在学习逆向前我们需要掌握一些汇编的基础知识的 同时我们得知道可执行文件的原理 计算机生成可执行文件&#xff0c;我们大致可以简单的这么理解 1.asm源程序文件 2.asm源程序生成obj也就是目标文件 3.由目标文件链接生成可执行文件&#xff0c;Windows的可执行文件通常是EXE&a…

【运维工程师学习三】shell编程

【运维工程师学习三】shell编程 1、系统中sh命令是bash的软链接2、Shell脚本标准格式之文件后缀3、Shell脚本标准格式之文件内容首行4、Shell脚本的运行方法一、作为可执行程序解释 二、作为解释器&#xff08;bash&#xff09;参数 5、find、grep、xargs、sort、uniq、tr、cut…

MOS、PMOS、NMOS

1、MOS 管 简介 MOS管的英文全称叫 MOSFET(Metal Oxide Semiconductor Field Effect Transistor)&#xff0c;即 金属氧化物半导体型场效应管&#xff0c;属于场效应管中的绝缘栅型。 2、MOS 管工作原理 学习视频链接 &#xff1a; 1、https://www.bilibili.com/video/BV1L54…

代码随想录算法训练营第五十二天|300.最长递增子序列、 674. 最长连续递增序列、 718. 最长重复子数组

最长递增子序列 dp[i]的定义dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度状态转移方程 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值。 所以&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1);dp[i]的初始化 每一…