以上四種情況均為最常見的排列組合,從有無順序和是否重復兩個維度進行思考,建議理解并背誦。
公司主營業務:成都網站建設、網站設計、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯建站是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯建站推出錫山免費做網站回饋大家。
在使用python計算排列組合之前,需要計算階乘,可以有兩種方式,一是使用math庫中的factorial函數,二是使用如下的遞歸函數。
按照排列的公式:
按照組合的公式:
3.1 生日問題
假設一個班級中共有n個人,一年有365天,其中每天作為生日的概率是相等的,那么其中至少有兩個人的生日在同一天的概率是多少?
此題屬于全排列問題,需要反向思考,寫出公式之后直接輸入到python中計算
3.2 大樂透問題
大樂透的玩法是這樣的,從35個紅球中選擇5個,從12個紅球中選擇2個,如果全中,那就中一等獎。那么請問,中一等獎的概率是多少?
此題屬于組合問題,中獎的可能性為一種,因此分子為1,分母為所有的組合情況。
給定一個可包含重復數字的序列 nums ,按任意順序 返回所有不重復的全排列。
示例 1:
輸入:nums = [1,1,2]
輸出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
輸入:nums = [1,2,3]
輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
源碼:
運行結果:
def?p(s,res=[]):
#將字符c插入到數列ar中,會有多少種排列
def?h(c,ar):
return?[ar[:i]+[c]+ar[i:]?for?i?in?range(len(ar)+1)]
#已有結果arr的基礎上,如果增加c字符,arr會變成多少種排列
def?g(c,arr,res=[]):
if?arr==res==[]:
return?[[c]]
elif?arr==[]:
return?res
else:
return?g(c,arr[1:],res+h(c,arr[0]))
#主體遞歸
if?s=='':
return?res
else:
return?p(s[1:],g(s[0],res))
if?__name__=='__main__':
s='ABCDE'
for?x?in?p(s):
print(''.join(x))
更多精彩內容,請關注 【力扣中等題】 。
難度:★★★☆☆
類型:數學
方法:回溯法
給定一個沒有重復數字的序列,返回其所有可能的全排列。
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
全排列其實可以使用python內置的permutations函數,例如求['a', 'b', 'c']的全排列,可以使用:itertools.permutations(['a', 'b', 'c'],3)快速得到。這里參考了 大佬博客 。
我們舉個例子,以字符串列表['a', 'b', 'c']為例,我們逐個位確定全排列的所有可能。回溯法的原理在于在前n-1位元素確定的情況下,求取n位以后的全排列。本例中,首先固定第0位,就是分別將第0位與它本身及后面各位元素交換,得到3種不同的可能,在固定這一位后,在考慮第1位的可能性,將第1位與它本身及其后元素交換,有兩種可能性,當前兩位元素確定后,最后一位只有一種可能性。因此一共有6種可能。
這里需要注意的是,每次交換元素并回溯尋找后,都要將元素交換回來,保持沒有交換前的狀態。
與回溯法類似,增加臨時列表用來存儲是否查看過變量。
如有疑問或建議,歡迎評論區留言~
def?perm(l):
#定義自定義函數?函數名為perm?參數為l?當傳入參數時?l等于該參數
if(len(l)=1):??
#if語句如果傳入的參數l的長度小于等于1(也就是0)則運行下面代碼?否則跳過該if#????#語句
return?[l]
#返回列表[l]?此處為遞歸的終止??
r=[]
#定義列表?并初始化r???
for?i?in?range(len(l)):??
#for循環(c語言常這么說)?迭代?i的變化范圍為0?到l(字母L)的長度-1
s=l[:i]+l[i+1:]
#?將l的前三項以及l的第i+1后的字串賦給s
p=perm(s)??
#遞歸?將s做perm的處理?遞歸請百度
for?x?in?p:
#迭代p列表??
r.append(l[i:i+1]+x)?
#將l的第i項添加進r列表?
return?r
#返回r列表
函數功能:將傳入perm()的字串、列表等參數進行全排列 并返回全排列后的列表
#遞歸不是人的思考方式…
當前題目:全排列函數python,排列的函數
文章地址:http://m.kartarina.com/article18/heiddp.html
成都網站建設公司_創新互聯,為您提供App開發、商城網站、網站制作、網站內鏈、服務器托管、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯