0
点赞
收藏
分享

微信扫一扫

LeetCode:46.全排列(Java语言)


​​原题链接​​

不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~

46.全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

解题思路:

ans集合存储所有结果可能
temp存储每个可能结果
vis数组存储每个位置是否被访问过
k==length说明产生了一种结果,则把这种结果加入集合中
利用深度优先遍历,将每个位置访问,形成新的结果,达到长度后,进行回溯,去放开每个位置,利用循环遍历该位置之后形成新的组合

代码:

/**
*作者:魏宝航
*2020年11月25日,下午14:02
*/
class Solution {
public List<List<Integer>> ans=new ArrayList<List<Integer>>();
public Integer[] temp;
public boolean[] vis;
public static int length=0;
public List<List<Integer>> permute(int[] nums) {
length=nums.length;
vis=new boolean[length];
temp=new Integer[length];
dfs(nums,0);
return ans;
}
public void dfs(int[] nums,int k){
if(k==length){
List<Integer> temp1=new ArrayList<>();
temp1=Arrays.asList(temp);
List<Integer> temp2=new ArrayList<>(temp1);
ans.add(temp2);
return;
}
for(int i=0;i<length;i++){
if(!vis[i]){
temp[k]=nums[i];
vis[i]=true;
dfs(nums,k+1);
vis[i]=false;
}
}
}
}

执行结果:


LeetCode:46.全排列(Java语言)_算法

举报

相关推荐

0 条评论