目錄
前言:
枚舉算法:
優(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ù)組中的所有元素,依次比較得到最大值。具體思路如下:
-
假設(shè)數(shù)組中第一個(gè)元素為最大值 max。
-
遍歷數(shù)組中的所有元素,對(duì)于每個(gè)元素,與 max 進(jìn)行比較,若當(dāng)前元素比 max 大,則更新 max 的值。
-
遍歷結(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ù)的乘積最大化。
返回?你可以獲得的最大乘積?。
這道題本質(zhì)上是一個(gè)動(dòng)態(tài)規(guī)劃解決的題,我們?cè)诹鬯㈩}篇中遇到過,也基于動(dòng)態(tài)規(guī)劃思路作了詳細(xì)的講解做了詳細(xì)的講解:
【力扣刷題 | 第十五天】_我是一盤牛肉的博客-CSDN博客
但其實(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ù)字。
?這道題我們用暴力枚舉也可以做,雖然思路簡(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)力!文章來源:http://www.zghlxwxcb.cn/news/detail-542832.html
文章來源地址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)!