求一个数组的全排列

求数组的全排列算一个十分简单且常见的问题,可以用递归简单的实现。

输入:
[1, 2, 3]
输出:
[1 2 3]
[1 3 2]
[2 1 3]
[2 3 1]
[3 2 1]
[3 1 2]

算法思路:
首先固定第一个元素,然后进行剩余元素的全排列。
例如[1, 2, 3],首先固定1,然后进行[2, 3]的全排列。
然后固定2,然后进行[3]的全排列。
当需要排列的数组只有一个元素的时候就完成了一个。
这里完成的是[1, 2, 3]
下一步就是固定[2, 3]这个序列中的3,然后进行[2]的全排列。
完成了[1, 3, 2]
再接下来固定[1, 2, 3]中的2, 进行[1, 3]的全排列。
...


代码如下:

func combination(arr []int, first, end int) {
    // 只剩下了一个元素
    // 就得到了一组排列
    if first == end {
        fmt.Println(arr)
    } else {
        // 依次交换每一个元素到第一个位置
        for i := first; i <= end; i++ {
            arr[first], arr[i] = arr[i], arr[first]
            combination(arr, first+1, end)
            // 交换回来
            arr[first], arr[i] = arr[i], arr[first]
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,151评论 0 18
  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 4,002评论 2 13
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,796评论 1 92
  • 首先了解KeyboardAvoidingView属性behavior PropTypes.oneOf(['heig...
    Lucky_1122阅读 928评论 0 0
  • 我将从网上搜出的内容放在这,以防忘记重新搜索!!!
    每个人的匆匆过客阅读 113评论 0 0