题目
解题思路
- 1.固定开始元素,剩下的元素进行全排列
- 2.继续固定下一位元素,剩下的元素进行全排列
- 3.递归终点为最后一个元素
- 4.交换下一个元素,重复执行第一步,直到所有元素替换完成
Code
class Solution {
//保存所有结果的集合
private List<List<Integer>> listNums = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
p(0,nums);
return listNums;
}
//全排列方法
public void p(int start,int[] nums){
//递归终止条件,已经是最后一个元素
if (start >= nums.length - 1){
//一组排列
List<Integer> nnnn = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
nnnn.add(nums[i]);
}
listNums.add(nnnn);
return;
}
//以第i个元素开头,剩下的元素排列
for (int i = start; i <nums.length; i++) {
//第i个元素和首元素交换
swap(i,start,nums);
//递归调用,以第i+1个元素开头,剩下的玄素进行全排列
p(start+1,nums);
//交换回来
swap(i,start,nums);
}
}
//交换元素方法
public void swap(int source,int target,int nums[]){
int temp = nums[target];
nums[target] = nums[source];
nums[source] = temp;
}
}
代码运行结果
标签:排列,递归,nums,int,元素,start,思路 来源: https://blog.csdn.net/weixin_56512682/article/details/122443965
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。