46. 全排列 --力扣 --JAVA
2023-12-20 15:28:14
题目
给定一个不含重复数字的数组?
nums
?,返回其?所有可能的全排列?。你可以?按任意顺序?返回答案。
解题思路
- 因为是全排序,所以可以先将数组转换成列表再对列表进行操纵;
- 通过不断固定每个位置的元素,然后递推下一个元素。
- 从0开始即将每个元素都可能出现在第一个位置。
代码展示
class Solution {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> data = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
//全排列将数组元素存放到列表中
for (int num : nums){
data.add(num);
}
dfs(0);
return ans;
}
private void dfs(int index){
if(index == data.size() - 1){
ans.add(new ArrayList<>(data));
return;
}
for (int i = index; i < data.size(); i++){
//将data.get(i)固定在x位置;
swap(i,index);
//递归固定下一个元素
dfs(index + 1);
//撤销交换
swap(i,index);
}
}
//交换元素位置
private void swap( int resource, int target){
int temp = data.get(resource);
data.set(resource,data.get(target));
data.set(target,temp);
}
}
文章来源:https://blog.csdn.net/qq_45794129/article/details/135105038
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!