前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode刷题(87)——46. 全排列

leetcode刷题(87)——46. 全排列

作者头像
老马的编程之旅
发布2022-06-22 13:56:19
1750
发布2022-06-22 13:56:19
举报
文章被收录于专栏:深入理解Android

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

示例:

代码语言:javascript
复制
输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

回溯算法的套路

代码语言:javascript
复制
for 选择 in 选择列表:
    # 做选择
    将该选择从选择列表移除
    路径.add(选择)
    backtrack(路径, 选择列表)
    # 撤销选择
    路径.remove(选择)
    将该选择再加入选择列表

于是我自己写的代码如下:

代码语言:javascript
复制
class Solution {
    private List<List<Integer>> result = new ArrayList<List<Integer>>();
    public List<List<Integer>> permute(int[] nums) {
        LinkedList<Integer> path = new LinkedList();
        boolean[] visted = new boolean[nums.length];
        for(int i=0;i<visted.length;i++){
            visted[i] = false;
        }
        backtrack(nums,path,visted);
        return result;
    }

    private void backtrack(int[] nums , LinkedList<Integer> path,boolean[] visted){
        for(int i=0; i<nums.length; i++){
            if(path.size()==nums.length){
                result.add(new LinkedList<Integer>(path));
                return;
            }
            int value = nums[i];
            if(visted[i]==true){
                continue;
            }
            path.add(value);
            visted[i] = true;
            backtrack(nums,path,visted);
            visted[i] = false;
            path.removeLast();
        }
    }
}

关键一步是添加结果时,要重新创建list,result.add(new LinkedList(path)); 不能直接result.add(path),因为path后面会有撤回操作,会被移除里面的元素,导致结果不对

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档