46. Permutations

这个题在《剑指offer》上面讲过

思路:

1.利用递归

2.遍历,每遍历到一个新的数索引为i,就复制i个新的数组,并且把这个新的数插入新复制出来的数组的各个位置上

java:

 1 class Solution {
 2     public List<List<Integer>> permute(int[] nums) {
 3         List<List<Integer>> res = new ArrayList<List<Integer>>();
 4         if(nums.length==0) return res;
 5         List<Integer> l0 = new ArrayList<Integer>();//用于被复制
 6         l0.add(nums[0]);
 7         res.add(l0);
 8         for(int i=1;i<nums.length;i++){
 9             List<List<Integer>> new_res = new ArrayList<List<Integer>>();
10             for(int j=0;j<=i;j++){
11                 for(List<Integer>l:res){
12                     List<Integer> new_l = new ArrayList<Integer>(l);
13                     new_l.add(j, nums[i]);
14                     new_res.add(new_l);
15                 }
16             }
17             res = new_res;
18         }
19         return res;
20     }
21     
22 }

 

python:

1 class Solution(object):
2     def permute(self, nums):
3         """
4         :type nums: List[int]
5         :rtype: List[List[int]]
6         """
7         return [ [n]+p for i,n in enumerate(nums) for p in self.permute(nums[:i]+nums[i+1:]) ] or [[]]

 

posted @ 2017-10-10 15:40  wilderness  阅读(163)  评论(0编辑  收藏  举报