https://leetcode.com/problems/permutations/
对于数组进行全排列,使用回溯法或者深度遍历的方法。
1、回溯法
使用temp list表示当前排列的数组,回溯法对temp list的大小进行判断,如果和nums的大小一致,加入到结果列表中。回溯法对新加入的元素按位插入。
package leetcode;
import java.util.ArrayList;
import java.util.List;
public class num46{
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if(nums == null || nums.length == 0) return result;
backtrack(result, new ArrayList<>(), nums);
return result;
}
public void backtrack(List<List<Integer>> res, List<Integer> temp, int[] nums){
if(temp.size() == nums.length){
res.add(new ArrayList<>(temp));
}else{
for(int i=0; i<=temp.size(); i++){
temp.add(i, nums[temp.size()]);
backtrack(res, temp, nums);
temp.remove(i);
}
}
}
public static void main(String[] args) {
int[] nums = {1, 2, 3};
num46 solution = new num46();
List<List<Integer>> result = solution.permute(nums);
for(List<Integer> list:result){
for(Integer item:list){
System.out.print(item + "\t");
}
System.out.println();
}
}
}
2、DFS
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = []
self.dfs(nums, [], res)
return res
def dfs(self, nums, path, res):
if not nums:
res.append(path)
for i in range(len(nums)):
self.dfs(nums[:i]+nums[i+1:], path+[nums[i]], res)
if __name__ == "__main__":
solution = Solution()
nums = [1, 2, 3]
res = solution.permute(nums)
print(res)