前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

go 实现LeetCode算法题:全排列

qiguaw 2024-11-24 20:40:20 资源文章 9 ℃ 0 评论

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

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

下面是一种可行的 go 实现方法:

我们可以使用回溯的方法来解决这道题目。

首先,我们定义一个变量 used,表示每个数字是否被使用过。

接着,我们枚举所有的数字,如果没有被使用过,我们就将它添加到当前的组合中,并将 used 设置为 true。

然后,我们递归调用本函数来处理剩余的数字。

在函数调用结束后,我们需要将当前的数字从组合中移除,并将 used 设置为 false。

下面是 go 代码的实现:

func permute(nums []int) [][]int {
    res := [][]int{}
    var dfs func([]int)
    dfs = func(cur []int) {
        if len(cur) == len(nums) {
            tmp := make([]int, len(cur))
            copy(tmp, cur)
            res = append(res, tmp)
            return
        }
        for i := 0; i < len(nums); i++ {
            if nums[i] == -1 {
                continue
            }
            cur = append(cur, nums[i])
            nums[i] = -1
            dfs(cur)
            cur = cur[:len(cur)-1]
            nums[i] = cur[len(cur)-1]
        }
    }
    dfs([]int{})
    return res
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表