全排列(LeetCode #43)

全排列(LeetCode #63)

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

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

题目链接:https://leetcode-cn.com/problems/permutations

解题思路

关于排列组合的题目,我们采用穷举法,先固定第一位为 1,然后第二位可以是 2,那么第三位只能是 3;然后可以把第二位变成 3,第三位就只能是 2 了;然后就只能变化第一位,变成 2,然后再穷举后两位……

算法原理

使用回溯算法,选择了一个节点后,递归选择剩下的节点,然后在回溯到上一个节点。

算法流程
  • 判断递归结束条件:当所选路径到达最后一个节点时,即track.size() == nums.length
  • 遍历所以可以选择的路径
    • 跳过已经不合法的选择
    • 将合法的节点加入到路径中
    • 继续递归选择:backtrack(路径,选择列表)
    • 撤销选择

我们从根节点开始遍历这颗树,所有路径上组合的数字就是我们想要的排列。

代码实现
class Solution {
    List<List<Integer>> res = new LinkedList<>();
    public List<List<Integer>> permute(int[] nums) {
        LinkedList<Integer> track = new LinkedList<>();
        baketrack(nums, track);
        return res;
    }
    void baketrack(int[] nums, LinkedList<Integer> track) {
        //end condition
        if(nums.length == track.size()) {
            res.add(new LinkedList(track));
            return;
        }
        for(int i = 0;i < nums.length;i++) {
            //Determine if duplicate elements exist
            if(track.contains(nums[i]))
                continue;
            //add to the path
            track.add(nums[i]);
            //backtrack
            baketrack(nums, track);
            //remove the element
            track.removeLast();
        }
    }
}
全部评论

相关推荐

09-01 09:00
已编辑
四川旅游学院 运营
牛客55195891...:主要是专业不好,别的没毛病
牛客解忧铺
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
4626次浏览 34人参与
# 你觉得mentor喜欢什么样的实习生 #
10815次浏览 299人参与
# 智慧芽求职进展汇总 #
26174次浏览 110人参与
# 帮我看看,领导说这话什么意思? #
6782次浏览 29人参与
# 26届秋招公司红黑榜 #
13570次浏览 45人参与
# 怎么给家人解释你的工作? #
1770次浏览 18人参与
# 平安产险科技校招 #
2440次浏览 0人参与
# 没有家庭托举的我是怎么找工作的 #
12886次浏览 162人参与
# 求职低谷期你是怎么度过的 #
5504次浏览 97人参与
# 实习必须要去大厂吗? #
146931次浏览 1543人参与
# 从哪些方向判断这个offer值不值得去? #
6850次浏览 95人参与
# 同bg的你秋招战况如何? #
158918次浏览 927人参与
# 度小满求职进展汇总 #
10263次浏览 53人参与
# 校招泡的最久的公司是哪家? #
4915次浏览 23人参与
# 面试紧张时你会有什么表现? #
1824次浏览 21人参与
# 你有哪些缓解焦虑的方法? #
37218次浏览 835人参与
# 你喜欢工作还是上学 #
77639次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85538次浏览 467人参与
# 秋招想进国企该如何准备 #
97773次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103640次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25119次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28167次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务