美文网首页
46. Permutations 全排列

46. Permutations 全排列

作者: sarto | 来源:发表于2022-04-01 13:00 被阅读0次

题目

给定一个不重复数组 nums ,返回所有可能的排列组合。可以以任意顺序返回。

解析

求一个数组的全排列,即是,每次从数组中取一个数,求这些提取顺序的组合。用递归求解很简单。
第一个问题,如何确定剩下的数字。
题目中给了约束条件,数字范围是 -10 到 10 之间,所以我们每次取出一个数,将这个数置为一个特定的数字,递归完成后,再将这个数字置为原来的数即可。

1 <= nums.length <=6
-10 <= nums[i] <= 10

伪代码

for i<lens(nums)
    if nums[i] == EMPTY
        continue
    res = nums[i]
    nums[i] = EMPTY
    rst = append(rst, res + func(nums[i]))
    nums[i] = res
return rst

代码

func permute(nums []int) [][]int {
    var rsts [][]int
    for i:=0;i<len(nums); i++ {
        if nums[i] == 1<<31-1 {
            continue
        }
        res := nums[i]
        nums[i] = 1<<31-1
        rst := permute(nums)
        if rst == nil {
            rsts = [][]int{{res}}
        }
        for i := range rst {
            rsts = append(rsts, append(rst[i], res))
        }
        nums[i] = res
    }
    return rsts
}
image.png

后记

  1. 当 permute 为 空的时候,记得返回当前元素作为结果

相关文章

网友评论

      本文标题:46. Permutations 全排列

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