码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode46-全排列(递归)

时间:2018-09-16 20:56:14      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:oid   ==   存在   col   out   i++   new   system   nta   

递归的使用,是真的烧脑子,只能多练。

 

整个思路就是,对每个数,进行匹配。

每次把1个数加到自己后面,再和剩下的全排列

 

这道题!是没有重复数字的!这非常好做!

 

举个例子

1,2,3,4吧

 

                                  【1】

                             【1、2】  【1、3】  【1、4】

                     【1、2、3】  【1、2、4】  【1、3、2】  【1、3、4】  【1、4、3】  【1、4、2】

                【1、2、3、4】  【1、2、4、3】  【1、3、2、4】  【1、3、4、2】  【1、4、3、2】  【1、4、2、3】

 

但对于2也是这样

 

总的来说,就是拿上一次的结果,加上自己后,进行递归。

递归就是循环选择数组里面还没在list里面的元素,加在后面。

 

这个代码很难写,多品一品

有个小技巧,不一定非得拿返回值,把结果存在参数里也行。这样直观一点,像全局变量一样,拿返回值很复杂

public class LeetCode46 {

    public static void main(String[] args) {

        int [] a = {1,2,3};

        List<List<Integer>> res = permute(a);

        for(int i=0;i<res.size();i++){
            List<Integer> list = res.get(i);
            for(int j=0;j<list.size();j++){
                System.out.print(list.get(j));
            }
            System.out.println();
        }


    }
    
    public static List<List<Integer>> permute(int[] nums) {

        List<List<Integer>> res = new ArrayList<>();

        for(int i=0;i<nums.length;i++){
            List<Integer> temp = new ArrayList<>();
            //对每个元素进行递归
            temp.add(nums[i]);
            digui(nums,temp,res);
        }

        return res;
    }


    //其实是每次对list和剩下的元素进行全排列
  //list是上一次的结果
public static void digui(int nums[],List<Integer> list,List<List<Integer>> res){ //最后的递归,在这里收集数据,上一次的结果list长度和数组一样长了,就是说一次排列完成 if(list.size()==nums.length){ res.add(list); return; } for(int i=0;i<nums.length;i++){ //如果这个数字前面没出现过的话,那么就加入当前数组中,进行下一次全排列 if(!list.contains(nums[i])){ List<Integer> temp = new ArrayList<>(); for(int j=0;j<list.size();j++){ temp.add(list.get(j)); } temp.add(nums[i]); digui(nums,temp,res); } } //循环跑完了就退出了 } }

 

LeetCode46-全排列(递归)

标签:oid   ==   存在   col   out   i++   new   system   nta   

原文地址:https://www.cnblogs.com/weizhibin1996/p/9657126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!