lecture-7 递归

Posted Shihu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lecture-7 递归相关的知识,希望对你有一定的参考价值。

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 递归的主要内容,如果未能解决你的问题,请参考以下文章

CS109 Lecture 7

原Andrew Ng斯坦福机器学习——Lecture 7

Cs231n课堂内容记录-Lecture 7 神经网络二

Deep RL Bootcamp Lecture 7: SVG, DDPG, and Stochastic Computation Graphs

Lecture 7 Affymetrix,R与bioconductor(芯片数据预处理及质量控制)

递归与尾递归