相关问题 更多 >
编程相关推荐
- servlets Java EE+GlassFish:如果用户在其他地方登录,则强制用户注销
- java在不更改源代码的情况下添加钩子
- 安卓 Java TextView Onclick()返回表达式错误
- java Excel文件未使用Apache存储内部内存
- java getRowCount()和getSelectedColumn()不起作用
- 无法在java中生成视图绑定。util。Android Gradle插件2.1的NoTouchElementException
- Java中的类型转换运算符百分比计算为零
- 主java中的调用方法
- java在Javasound中播放多个示例
- java如何知道webDriver成功打开URL
进行排列的复杂性大约是O(n*n!),所以对于大数或列表,生成所有可能的排列都会很低效,可以用回溯来生成列表排列,我会分享一个链接可能会有帮助。 The solution is based on the backtracking
def permute(a, l, r): if l == r: print(a) else: for i in range(l, r + 1): a[l], a[i] = a[i], a[l] permute(a, l + 1, r) a[l], a[i] = a[i], a[l] data = [1,2,3,4,5] n = len(data) a = list(data) permute(a, 0, n - 1)
;下面的代码生成最后一个
n-1
个数的所有置换,在每个置换之前加上原始列表的第一个元素。在其中
my_list
是生成所有循环置换的初始值列表。在当你有一个N个元素的列表时,列表的一个循环排列是由它的第一个元素唯一给出的。Than意味着您将有N个循环排列(包括原始列表),并且您可以通过移除第一个元素并将其添加到列表末尾来从一个元素传递到另一个元素。在
您可以轻松地为列表的所有循环排列生成生成器:
演示:
^{pr2}$如果你想要的是唯一的排列,当两个排列是另一个的圆形排列时,你仍然可以使用这样一个事实:一个圆形排列是由它的第一个元素给出的,然后固定第一个元素,然后找到剩下的所有排列:
演示: