20190129-‘abcdefgh’裏面挑出3個字母進行組合,一共有多少組合

一. 百度面試題‘abcdefgh’裏面挑出3個字母進行組合,一共有多少組合,要求3個字母中不能有重複的組合,三個字母同時出現的次數只能出現一次,如出現了abc就不能出現cab,bca等python

思路:面試

1. abcdefgh裏面挑選3個字母進行組合,考慮使用3層for循環,而後使用if條件過濾不符合要求的組合app

2. 3個字母中不能有重複的組合,考慮使用i!=j,i!=k,k!=i函數

3. 三個字母同時出現的次數只能出現一次,首先使用result來存儲符合條件的組合,經過遍歷result裏面的item,使用條件if i in item and j in item and k in item,若是符合條件break,退出該層循環,若是遍歷完result後都沒有符合條件的,則代表符合組合要求,count+1,並將組合插入result中spa

 
 
e = 'abcdefghi'

 for i in e:code

#第一個字符 for j in e: #第二個字符 for k in e: #第三個字符 if i!=j and j!=k and k!=i: for item in result: if i in item and j in item and k in item: break else: #與for item in result對應,當for主體中沒有執行break語句的時候,else語句執行  item= i+j+k result.append(item) count+=1 print("共計%s個"%count) print('分別爲:',result)

 三個字母同時出現的次數只能出現一次,能夠考慮使用sort來實現,如sorted(item) not in list(map(lambda x:sorted(x),for x in result_two))來實現,具體寫法以下:blog

e = 'abcdefghi' #方法2: #三個字母同時出現的次數只能出現一次,能夠考慮使用sort來實現,如sorted(item) not in list(map(lambda x:sorted(x),for x in result_two))來實現,具體寫法 count_two=0 result_two=[] for i in e: #第一個字符 for j in e: #第二個字符 for k in e: #第三個字符 item = i+j+k if item.count(i)>1 or item.count(j)>1 or item.count(k)>1: continue if sorted(list(item)) not in list(map(lambda x:sorted(x),result_two)): result_two.append(item) count_two+=1 print("共計%s個"%count_two) print('分別爲:',result_two)

以上兩種方法皆可實現題目的需求,核心考慮點爲三個字母同時出現的次數只能出現一次,如出現了abc,就不能再出現cab,cba,bca等等three

第三種方法,使用python內置函數itertools,寫法以下:it

import itertools count_three= 0 result_three=[] for i in itertools.combinations(e,3): count_three+=1 result_three.append(''.join(i)) print("共計%s個"%count_three) print('分別爲:',result_three)
相關文章
相關標籤/搜索