3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
我不認(rèn)為你的 n 和 m 的輸出分別是 3, 2,真的有意義。在第6行之后,后面[0, 2, 0]不應(yīng)該接代替嗎?第 13 排之后也發(fā)生了同樣的情況。[0, 2, 1][1, 0, 0]
無(wú)論如何,這是一個(gè)遞歸替代方案:
n = 3
m = 2
def permutation(n, m):
if n <= 0:
yield []
else:
for i in range(m+1):
for j in permutation(n-1, m):
yield [i] + j
# or even shorter
def permutation(n, m):
return [[i] + j for i in range(m + 1) for j in permutation(n - 1, m)] if n > 0 else []
for i in permutation(n, m):
print(i)
輸出:
[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], ..., [2, 1, 0], [2, 1, 1], [2, 1, 2], [2, 2, 0], [2, 2, 1], [2, 2, 2]]

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
這個(gè)問題似乎得到了解答,但我想為迭代排列提供一個(gè)更簡(jiǎn)單的替代方案。在這里,我使用列表推導(dǎo)式、格式化字符串文字(f'string' 字符串)和 eval 內(nèi)置方法。希望這個(gè)觀點(diǎn)對(duì)你有幫助(以某種方式?)。
def get_permutations_list(array_size, max_value):
'''Returns a list of arrays that represent all permutations between zero
and max_value'''
array_member =''
for_loops=''
#Does a loop iteration for each member of the permutation list template
for i in range(array_size):
#adds a new member in each permutation
array_member += f'x{i}, '
#adds a new corresponding for loop
for_loops+=" for x{i} in range({value})".format(i=i,
value=max_value)
output = f'[[{array_member}] {for_loops}]' #combines it all together
return eval(output)
a = get_permutations_list(array_size=2, max_value=2)
print(a)
#Result: [[0,0],[0,1],[1,0],[1,1]]

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
3.你想要得到所有的排列。給定 n 和 m 的排列數(shù)為 (m+1)^n。因?yàn)槟鷮?shí)際上想要打印所有這些,所以時(shí)間復(fù)雜度也是 O((m+1)^n),這是迭代執(zhí)行時(shí)得到的結(jié)果。
1+2。我認(rèn)為你不應(yīng)該使用遞歸來(lái)做到這一點(diǎn),O((m+1)^n) 是你可以做到這一點(diǎn)的最佳時(shí)間,這就是使用迭代時(shí)得到的結(jié)果。遞歸也會(huì)為其內(nèi)存堆棧占用更多內(nèi)存。
添加回答
舉報(bào)