全排列
leetcode第46题(中等)
原链接 https://leetcode-cn.com/problems/permutations/
问题描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
解题思路
递归,具体算法用语言不好描述,具体请看代码。
代码(java)
class Solution {
private int[] nums;
private List<List<Integer>> list=new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
this.nums=nums;
recursion(0,nums.length-1);
return list;
}
public void recursion(int f,int t){
if(f==t){
ArrayList arrayList=new ArrayList();
for (int i=0;i<nums.length;i++){
arrayList.add(nums[i]);
}
list.add(arrayList);
return;
}
for(int i=f;i<=t;i++){
swap(i,f);
recursion(f+1,t);
swap(i,f);
}
}
public void swap(int i,int j){
int t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
}
猜你喜欢
blog
递归实现全排列算法 c++描述
数据结构与算法
4816
递归实现全排列算法c++描述#includeiostreamusingnamespacestd;//交换voidexchange(int*a,inti,intj){if(i==j){return
blog
算法-快速排序
数据结构与算法
3715
外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。java实现:packagesort.fast;/***快速排序*@aut
blog
十种排序算法理解(前五)
数据结构与算法
5254
十种排序算法理解(前五)1.冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。算法描述:比较相邻的元素。如果第一个比第二个大,就
blog
全文检索笔记
工具
1682
全文检索流程分析图索引库中是如何存储的?数据库的一行数据会存储为一个document对象,一条记录的一列会存储为一个field,不会将数据库的所有数据都存储到索引库。索引是如何创建过程流程图1.分析
blog
数据结构+算法-堆排序
数据结构与算法
4695
堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。以最小堆为例下沉操
blog
快速排序 - 数据结构与算法
数据结构与算法
1472
算法思想将待排序集合以该集合中随机的一个数为分界点分成左右两个集合,一次排序使其右边的集合的数据全部大于左边的集合,然后再分别递归式的对左右两个集合执行上述排序操作,直到递归集合没有数据,递归结束完
blog
lucene全文检索(搜索)
框架
979
lucene全文检索依赖jardependencygroupIdorg.apache.lucene/groupIdartifactIdlucene-highlighter
ofc
外观数列
official
719
leetcode第38题(简单)原链接:https://leetcode-cn.com/problems/count-and-say/问题描述给定一个正整数n,输出外观数列的第n项。「外观数列」是一
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。