美文网首页
求一个数组的全排列

求一个数组的全排列

作者: 我有一只碗 | 来源:发表于2018-03-25 12:46 被阅读0次

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

    输入:
    [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]
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:求一个数组的全排列

          本文链接:https://www.haomeiwen.com/subject/blphcftx.html