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

lecture-7 递归

时间:2017-08-26 21:29:24      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:method   空间复杂度   and   内存   思路   return   integer   bsp   move   

1、例题Permutation
Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].
public List<List<Integer>> permute(int[] nums) {
// Implement this method.
}

1)边界条件:组合问题,输入为空,输出为空;其他情况都是正常的。

2)思路:第一个位置先选一个数,第二位置从剩下的两个数里面选一个数,第三个位置只能选最后一个数。

那么N个数的Level-N问题这样化简:第一个位置从N个数里面选择一个,剩余N-1位置和N-1个数,生成一个Level-(N-1)的问题,形成递归。

3)代码实现

public List<List<Integer>> permute(int[] nums) {
  List<List<Integer>> numList = new List<List<Integer>>();

  for (int i = 0 ; i < nums.length; i++) {

    numList.add(nums[i]);

  }

   return permutes(new List<Integer>(); numList);

  }

  /*先实现递归函数主体*/

  List<List<Integer>> permutes(List<Integer> cur, List<Integer> nums)

  {  List<List<Integer>> results = new List<List<Integer>>();

    if (0 == nums.size()) {

      ///List<Integer> result = new ArrayList<>(cur);  ///不需要这一行,因为上一层函数已经申请了新的内存空间

      results.add(result);

      return results;

    }

    for (int i = 0; i < nums.size(); i++) {

      List<Integer> newCur = new ArrayList<>(cur);

      newCur.add(nums.get(i));

      List<Integer> newNum = new ArrayList<>(nums);

      newNums.remove(i); 

         result.addAll(permutes(newCur, newNum));

    }

    return results;

  }
}

4)时间复杂度:O(n!);空间复杂度:O(n!)---空间复杂度似乎不准

5)其他解法

List<List<Integer>> permutes(List<Integer> cur, List<Integer> num) {

  

}

lecture-7 递归

标签:method   空间复杂度   and   内存   思路   return   integer   bsp   move   

原文地址:http://www.cnblogs.com/shihuvini/p/7436356.html

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