您的位置:首页 > 编程语言 > Java开发

【leetcode】【46】Permutations

2015-11-26 14:49 609 查看

一、问题描述

Given a collection of 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]
.

二、问题分析

同样是backtracking,与combinations极其类似,不过该题中需要用到一个visited数组来标记一下某个元素是否访问过。

三、Java AC 代码

public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
List<Integer> item = new ArrayList<Integer>();
if (nums==null || nums.length==0) {
return list;
}
boolean[] visited = new boolean[nums.length];
dfsHelper(list, item, nums, visited);
return list;
}
public void dfsHelper(List<List<Integer>> list, List<Integer> item, int[] nums, boolean[] visited){
if (item.size()==nums.length) {
list.add(new ArrayList<Integer>(item));
return ;
}
for (int i = 0; i < nums.length; i++) {
if (!visited[i]) {
item.add(nums[i]);
visited[i] = true;
dfsHelper(list, item, nums, visited);
visited[i] = false;
item.remove(item.size()-1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode backtracking