演算法和資料結構入門 Day9 實現排列組合

2021-10-05 04:08:28 字數 1721 閱讀 1258

action9:排列組合

輸入乙個字串,輸出這個字串的所有排列,並刪除重複的情況

方法一:

def permutation(string):

result = set()

if len(string) == 0:return string

charlist = list(string)

permutation(charlist, 0, result)

return result

def permutation(charlist, begin, result):

if begin == len(charlist)-1:result.add(''.join(charlist[:]))

else:

for i in range(begin, len(charlist)):

# 如果是重複字元,跳過

if charlist[begin] == charlist[i] and begin != i:

continue

else:

# 依次與後面每個字元交換

charlist[begin], charlist[i] = charlist[i], charlist[begin]

permutation(charlist, begin + 1, result)

print(permutation('a'))

print(permutation('ab'))

print(permutation('abc'))

print(len(permutation('abcd')))

print(len(permutation('aabbcd')))

方法二:

def permutation(string):

result = set()

if len(string) <= 1:return string

for i in range(len(string)):

for j in map(lambda x: string[i]+x, permutation(string[:i]+string[i+1:])):

result.add(j)

return result

# print(permutation('a'))

# print(permutation('ab'))

# print(permutation('aabb'))

print(len(permutation('abc')))

print(len(permutation('abcde')))

方法三:

def permutation(string):

if len(string) <= 1:return string

list_result =

# for i in range(len(string)):

list_s = list(string)

# list_s.remove(string[i])

# print('i的時候的list_r={}'.format(list_s))

for i in range(len(list_s)):

qw = list_s.pop(0)

return set(list_result)

資料結構Day9

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?總結 最近這段時間太忙了,今天終於有時間可以坐下來繼續我的學習之...

演算法和資料結構

演算法和資料結構 演算法和資料結構 千絲萬縷的聯絡 縱觀各種演算法書籍,大多都是將演算法和資料結構作為乙個整體來講述。資料結構就是陣列 樹結構等儲存或表現物件資料的結構。將演算法和資料結構作為整體講述,是因為必須依照演算法中的常用操作選擇資料結構。例如,事先將資料儲存在適當的樹形結構中,大多數情況下...

演算法和資料結構

演算法 資料結構與演算法的關係是相互依賴不可分割的。演算法的定義 演算法是解決特定問題求解步驟的描述,在計算機中為指令的有限序列,並且每條指令表示乙個或多個操作。演算法的特性 有窮性 確定性 可行性 輸入 輸出。演算法設計的要求 正確性 可讀性 健壯性 高效率和低儲存量需求。演算法特性與演算法設計容...