国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法

這篇具有很好參考價(jià)值的文章主要介紹了【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法,【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】,算法,開發(fā)語言,學(xué)習(xí)

目錄

前言:

枚舉算法:

優(yōu)點(diǎn):

枚舉算法的種類:

枚舉算法案例:

343. 整數(shù)拆分 - 力扣(LeetCode)

12. 整數(shù)轉(zhuǎn)羅馬數(shù)字 - 力扣(LeetCode)

總結(jié):


前言:

本文我們將為大家介紹什么是枚舉算法,以及枚舉算法的優(yōu)點(diǎn),在后面我們也會(huì)為大家講解幾道枚舉算法的經(jīng)典例題,各位感興趣的可以點(diǎn)擊進(jìn)來進(jìn)行閱讀。

枚舉算法:

枚舉算法也稱為窮舉算法,是一種基本的計(jì)算機(jī)算法。該算法的基本思想是列舉出所有可能的情況,并一一進(jìn)行考慮和判斷,最終得出正確的答案。?

枚舉算法的步驟通常如下:
1. 確定問題的解空間,即問題的所有可能解的集合;
2. 枚舉解空間中所有可能的解;
3. 對(duì)于每個(gè)解,判斷其是否符合問題的要求;
4. 最終得出所求的答案,即符合問題要求的解。

枚舉算法的優(yōu)點(diǎn)在于其思路簡(jiǎn)單,易于理解和實(shí)現(xiàn)。但是,由于其需要遍歷所有可能的解,因此它的計(jì)算量較大,對(duì)于規(guī)模較大的問題,枚舉算法的效率會(huì)比較低。

在實(shí)際應(yīng)用中,枚舉算法通常用于解決一些簡(jiǎn)單的問題,如求解一個(gè)方程的整數(shù)解、求解最大公約數(shù)和最小公倍數(shù)等。除此之外,枚舉算法也可以作為其他算法(如貪心算法、動(dòng)態(tài)規(guī)劃算法等)的子算法,用于求解一些復(fù)雜問題。

下面我們以求解一個(gè)整數(shù)數(shù)組的最大值為例來介紹枚舉算法的思路:

假設(shè)我們有一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)組,我們要找到其中的最大值。最樸素的方法就是遍歷數(shù)組中的所有元素,依次比較得到最大值。具體思路如下:

  1. 假設(shè)數(shù)組中第一個(gè)元素為最大值 max。

  2. 遍歷數(shù)組中的所有元素,對(duì)于每個(gè)元素,與 max 進(jìn)行比較,若當(dāng)前元素比 max 大,則更新 max 的值。

  3. 遍歷結(jié)束后,max 的值即為數(shù)組最大值。

該算法的實(shí)現(xiàn)方式非常簡(jiǎn)單,以下是一個(gè)代碼示例:

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

該算法的時(shí)間復(fù)雜度為 O(n),因?yàn)樾枰闅v整個(gè)數(shù)組,與數(shù)組大小 n 成正比。這種算法通常適用于數(shù)據(jù)規(guī)模較小的情況下。若數(shù)據(jù)規(guī)模較大時(shí),該算法的時(shí)間復(fù)雜度會(huì)變得非常高,這時(shí)相應(yīng)地需要使用更為高效的算法。

總的來說,枚舉算法雖然簡(jiǎn)單,但具有一定的局限性。在實(shí)際應(yīng)用中,需要根據(jù)具體問題選擇合適的算法,以滿足問題求解的要求。

其實(shí)枚舉算法的核心思想很簡(jiǎn)單,暴力求解出所有問題的答案,然后根據(jù)需求確定返回值就可以了。

優(yōu)點(diǎn):

1. 思路簡(jiǎn)單,易于理解和實(shí)現(xiàn):枚舉算法的基本思想是列舉出所有可能的情況,并一一進(jìn)行考慮和判斷,這個(gè)過程比較直觀,容易理解。

2. 適用范圍廣泛:枚舉算法適用于解決各種類型的問題,不論是數(shù)值計(jì)算、圖論、字符串等方面,都可以使用枚舉算法來解決。

3. 可以保證求解結(jié)果的正確性:由于枚舉算法會(huì)窮舉所有可能的解,因此可以保證其求解結(jié)果是正確的,而不會(huì)產(chǎn)生遺漏的情況。

4. 實(shí)現(xiàn)復(fù)雜度低:相對(duì)于其他更為高級(jí)的算法,如動(dòng)態(tài)規(guī)劃、貪心算法等,枚舉算法的實(shí)現(xiàn)復(fù)雜度要比較低,因?yàn)椴恍枰M(jìn)行過于復(fù)雜的優(yōu)化。

5. 可以用來驗(yàn)證其他算法的正確性:由于枚舉算法能夠保證結(jié)果正確,因此可以用來和復(fù)雜度更高的算法結(jié)果進(jìn)行對(duì)比,以驗(yàn)證這些算法的正確性。

總的來說,枚舉算法雖然存在一些明顯的缺點(diǎn)(如計(jì)算量大),但其簡(jiǎn)單易懂、適用范圍廣泛和保證結(jié)果正確性等優(yōu)點(diǎn),使得枚舉算法在解決某些問題時(shí),仍然是一種非常有用的算法。

枚舉算法的種類:

1. 完全枚舉:

完全枚舉算法,即窮盡所有可能性,在所有情況下依次判斷,求出滿足要求的正確答案。這種算法看似簡(jiǎn)單,但由于它的時(shí)間復(fù)雜度通常比較高,因此對(duì)于較大的問題規(guī)模,完全枚舉的效率會(huì)比較低。

完全枚舉算法往往適用于解決規(guī)模較小的問題,如求解一個(gè)方程的整數(shù)解、求解最大公約數(shù)和最小公倍數(shù)等。

2. 部分枚舉:

部分枚舉算法,即不完全地枚舉解空間,只考慮一部分情況或減少某些非必須分支路徑,以提高計(jì)算效率。部分枚舉算法的時(shí)間復(fù)雜度通常比完全枚舉算法低,因此在處理復(fù)雜問題時(shí)較為常見。

例如,對(duì)于實(shí)現(xiàn)圖像處理算法,可以使用部分枚舉來優(yōu)化處理效率。例如,可以先檢查圖像中是否存在某些既定的特征(比如顏色、亮度等方面),然后只需對(duì)這些區(qū)域進(jìn)行進(jìn)一步處理,從而減少完成整個(gè)圖像處理的計(jì)算量。

枚舉算法案例:

343. 整數(shù)拆分 - 力扣(LeetCode)

給定一個(gè)正整數(shù)?n?,將其拆分為?k?個(gè)?正整數(shù)?的和(?k >= 2?),并使這些整數(shù)的乘積最大化。

返回?你可以獲得的最大乘積?。

【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法,【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】,算法,開發(fā)語言,學(xué)習(xí)

這道題本質(zhì)上是一個(gè)動(dòng)態(tài)規(guī)劃解決的題,我們?cè)诹鬯㈩}篇中遇到過,也基于動(dòng)態(tài)規(guī)劃思路作了詳細(xì)的講解做了詳細(xì)的講解:

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

【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法,【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】,算法,開發(fā)語言,學(xué)習(xí)但其實(shí)我們根據(jù)這個(gè)提示來講,n只有58,也就是只有58種結(jié)果,那麼我們直接枚舉就可以了。

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. 整數(shù)轉(zhuǎn)羅馬數(shù)字 - 力扣(LeetCode)

羅馬數(shù)字包含以下七種字符:?I,?V,?X,?L,C,D?和?M。

字符 ? ? ? ? ?數(shù)值
I ? ? ? ? ? ? 1
V ? ? ? ? ? ? 5
X ? ? ? ? ? ? 10
L ? ? ? ? ? ? 50
C ? ? ? ? ? ? 100
D ? ? ? ? ? ? 500
M ? ? ? ? ? ? 1000
例如, 羅馬數(shù)字 2 寫做?II?,即為兩個(gè)并列的 1。12 寫做?XII?,即為?X?+?II?。 27 寫做??XXVII, 即為?XX?+?V?+?II?。

通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做?IIII,而是?IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為?IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:

I?可以放在?V?(5) 和?X?(10) 的左邊,來表示 4 和 9。
X?可以放在?L?(50) 和?C?(100) 的左邊,來表示 40 和?90。?
C?可以放在?D?(500) 和?M?(1000) 的左邊,來表示?400 和?900。
給你一個(gè)整數(shù),將其轉(zhuǎn)為羅馬數(shù)字。

【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法,【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】,算法,開發(fā)語言,學(xué)習(xí)

?這道題我們用暴力枚舉也可以做,雖然思路簡(jiǎn)單,但是代碼太過于繁雜。

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)  
                

總結(jié):

枚舉算法是一種簡(jiǎn)單的算法思想,它利用結(jié)果數(shù)量少,以此列舉出所有的結(jié)果,再根據(jù)需求返回值,缺點(diǎn)相信大家通過兩道例題也可以看出來:代碼過于繁雜,但確實(shí)是一種淳樸的算法思想。

如果我的內(nèi)容對(duì)你有幫助,請(qǐng)點(diǎn)贊,評(píng)論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動(dòng)力!

【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法,【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】,算法,開發(fā)語言,學(xué)習(xí)文章來源地址http://www.zghlxwxcb.cn/news/detail-542832.html

到了這里,關(guān)于【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第十一篇】枚舉算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第一篇】KMP算法

    【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第一篇】KMP算法

    目錄 ?前言: ?KMP算法簡(jiǎn)介: 引入概念: 前綴后綴 前綴表: 簡(jiǎn)單例子: 暴力遍歷: KMP算法:? ?KMP算法難點(diǎn): 總結(jié): 本篇我們將詳細(xì)的從理論層面介紹一下什么是KMP算法,相對(duì)應(yīng)的力扣刷題專欄里也會(huì)有相對(duì)應(yīng)的習(xí)題,歡迎各位前往閱讀。 ? ? ? ? ? KMP算法是一種字符

    2024年02月08日
    瀏覽(29)
  • 【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第三篇】 二叉樹

    【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第三篇】 二叉樹

    目錄 ?前言: ?二叉樹: 二叉樹的種類:? 二叉樹的存儲(chǔ)方式: 1. 鏈?zhǔn)酱鎯?chǔ) 2. 數(shù)組存儲(chǔ) 二叉樹的遍歷方式 深度優(yōu)先遍歷 廣度優(yōu)先遍歷 總結(jié): 本文將會(huì)詳細(xì)的介紹各種常見的樹以及相對(duì)應(yīng)的概念,存儲(chǔ)方式,遍歷方式。樹是經(jīng)典的數(shù)據(jù)結(jié)構(gòu),因此我們雖然不能做到手撕各

    2024年02月11日
    瀏覽(35)
  • 【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第九篇】棧與隊(duì)列

    【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第九篇】棧與隊(duì)列

    目錄 ?前言: 棧: 棧的實(shí)際應(yīng)用:? 隊(duì)列: 隊(duì)列的實(shí)際應(yīng)用: 總結(jié): ? ? ? ? 棧與隊(duì)列是我們學(xué)習(xí)的兩個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),這兩個(gè)數(shù)據(jù)結(jié)構(gòu)應(yīng)用廣泛,在計(jì)算機(jī)內(nèi)有很多底層應(yīng)用,而很多算法也是依靠棧和隊(duì)列來實(shí)現(xiàn)的,因此我們要想學(xué)好數(shù)據(jù)結(jié)構(gòu)與算法,就要學(xué)好棧與

    2024年02月15日
    瀏覽(13)
  • 【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第四篇】手撕二叉樹遍歷

    【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第四篇】手撕二叉樹遍歷

    目錄 前言: 二叉樹遍歷方式: 手撕前中后序遍歷(遞歸)的三大準(zhǔn)備 深度優(yōu)先搜索:? 手撕前中后遍歷(遞歸): 手撕前中后序遍歷(迭代): 深度優(yōu)先搜索: 總結(jié): ? ? ? ? 今天我們將帶領(lǐng)大家手撕二叉樹的遍歷,本篇會(huì)分別講解深度優(yōu)先搜索法和廣度優(yōu)先有搜索法下

    2024年02月09日
    瀏覽(24)
  • 【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第二篇】后綴(逆波蘭)表達(dá)式

    【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第二篇】后綴(逆波蘭)表達(dá)式

    目錄 前言:? 中綴表達(dá)式: ?后綴表達(dá)式: 中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式: 后綴表達(dá)式計(jì)算結(jié)果: 總結(jié):? 計(jì)算機(jī)在計(jì)算四則運(yùn)算的時(shí)候,由于括號(hào)以及運(yùn)算優(yōu)先級(jí)的存在,并不能夠很好的處理所有的運(yùn)算,為了處理這種情況,我們引入了后綴表達(dá)式來優(yōu)化算法。 ????? ??

    2024年02月13日
    瀏覽(34)
  • 【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第七篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    【夜深人靜學(xué)數(shù)據(jù)結(jié)構(gòu)與算法 | 第七篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    前言:? 引入:? 時(shí)間復(fù)雜度: ?案例: 空間復(fù)雜度: 案例: TIPS:? ? ? ? 總結(jié): ????????今天我們將來介紹時(shí)間復(fù)雜度和空間復(fù)雜度,我們代碼的優(yōu)劣就是依靠這個(gè)在評(píng)判,以此為背景,我們誕生出了不少的經(jīng)典思路:用時(shí)間換空間,用空間換取時(shí)間。而大多數(shù)同學(xué)

    2024年02月10日
    瀏覽(23)
  • 夜深人靜學(xué)32系列10——GPIO中斷/NVIC/EXTI/SYSCFG詳解,外部中斷控制LED

    夜深人靜學(xué)32系列10——GPIO中斷/NVIC/EXTI/SYSCFG詳解,外部中斷控制LED

    上期我們學(xué)習(xí)了GPIO驅(qū)動(dòng)數(shù)碼管/蜂鳴器/LED和按鍵等外設(shè),本期我們一起來學(xué)習(xí)STM32中斷的相關(guān)內(nèi)容 當(dāng)CPU正在處理某個(gè)事件的時(shí)候,外界發(fā)生了緊急事件請(qǐng)求,CPU需要暫停當(dāng)前的工作,轉(zhuǎn)而去處理這個(gè)緊急事件,處理完之后,再次回到之前被中斷的地方,繼續(xù)執(zhí)行原來的工作,

    2024年01月16日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)作業(yè)—第十三周---- Prim算法 Kruskal算法 Dijkstra算法

    數(shù)據(jù)結(jié)構(gòu)作業(yè)—第十三周---- Prim算法 Kruskal算法 Dijkstra算法

    (只看點(diǎn),不看邊,適合邊較多的圖,即 稠密圖 ) ? ? ? 是一種按權(quán)值的遞增次序選擇合適的邊來構(gòu)造最小生成樹的方法;( 稀疏圖 ) 適合帶權(quán)有向圖和帶權(quán)無向圖求單源最短路徑; 不適合含負(fù)取值的圖,求最短路徑; 1 .?單選題?簡(jiǎn)單?7分 對(duì)于有n個(gè)頂點(diǎn)的帶權(quán)連通圖

    2024年02月15日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)入門精講 | 第十七篇】一文講清圖及各類圖算法

    【數(shù)據(jù)結(jié)構(gòu)入門精講 | 第十七篇】一文講清圖及各類圖算法

    在上一篇中我們進(jìn)行了的并查集相關(guān)練習(xí),在這一篇中我們將學(xué)習(xí)圖的知識(shí)點(diǎn)。 下面介紹幾種在對(duì)圖操作時(shí)常用的算法。 深度優(yōu)先搜索(DFS)是一種用于遍歷或搜索樹、圖等數(shù)據(jù)結(jié)構(gòu)的基本算法。該算法從給定的起點(diǎn)開始,沿著一條路徑直到達(dá)到最深的節(jié)點(diǎn),然后再回溯到

    2024年02月03日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)第十一彈---堆

    數(shù)據(jù)結(jié)構(gòu)第十一彈---堆

    堆就是以二叉樹的順序存儲(chǔ)方式來存儲(chǔ)元素,同時(shí)又要滿足父親結(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)都要 大于等于 兒子結(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)(也可以是父親結(jié)點(diǎn)數(shù)據(jù)都要 小于等于 兒子結(jié)點(diǎn)數(shù)據(jù))的一種數(shù)據(jù)結(jié)構(gòu)。堆只有兩種即 大堆和小堆 , 大堆就是父親結(jié)點(diǎn)數(shù)據(jù)大于等于兒子結(jié)點(diǎn)數(shù)據(jù),小堆則反之。

    2024年02月03日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包