lintcode,全排列
来源:互联网 发布:php curl 大文件 编辑:程序博客网 时间:2024/04/30 21:42
给定一个数字列表,返回其所有可能的排列。
样例
给出一个列表[1,2,3],其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
一刷ac
解题思路:递归或者非递归。递归需要每次置换首位,然后递归后面的字符串,最后在递归结果中加入首位字符。非递归考虑用队列存储每次的排列,再上一次的全排列中,对每个字符串所有可能的位置插入新的字符。
class Solution { /** * @param nums: A list of integers. * @return: A list of permutations. */ public List<List<Integer>> permute(int[] nums) { List<List<Integer>> rst = new ArrayList<List<Integer>>(); if(nums == null) return rst; if(nums.length == 0) { rst.add(new ArrayList<Integer>()); return rst; } if(nums.length == 1){ List<Integer> res = new ArrayList<Integer>(); res.add(nums[0]); rst.add(res); return rst; } for(int i = 0; i < nums.length; i++){ int[] tmp = new int[nums.length-1]; int start = 0; for(int j = 0; j < nums.length-1;){ if(start != i){ tmp[j] = nums[start]; start++; j++; }else start++; } List<List<Integer>> ans = permute(tmp); for(List<Integer> item : ans) item.add(0, nums[i]); rst.addAll(ans); } return rst; }}
非递归
class Solution { /** * @param nums: A list of integers. * @return: A list of permutations. */ public List<List<Integer>> permute(int[] nums) { LinkedList<List<Integer>> rst = new LinkedList<List<Integer>>(); if(nums == null) return rst; rst.add(new ArrayList<Integer>()); for(int num : nums){ int size = rst.size(); for(; size > 0; size--){ List<Integer> tmp = rst.pollFirst(); for(int i = 0; i <= tmp.size(); i++){ List<Integer> ans = new ArrayList<Integer>(tmp); ans.add(i, num); rst.add(ans); } } } return rst; }}
0 0
- LintCode:全排列
- lintcode,字符串全排列
- lintcode,全排列
- LintCode 15 全排列
- lintcode--全排列
- LintCode-----15.全排列
- 全排列-LintCode
- LintCode permutations(全排列)
- lintcode--全排列
- Lintcode 15. 全排列
- LintCode-----16.带重复的全排列
- (lintcode)第15题 全排列(没有重复数字)
- LintCode 15-全排列 16-带重复元素的全排列
- LintCode-下一个排列
- lintcode-下一个排列
- lintcode-上一个排列
- LintCode 197. 排列序号
- lintcode ----排列序号
- 算法题整理
- 第一章 Single Threaded Execution
- 【知其所以然】-对链接的思考
- 从零开始,深度学习(一)
- 周期信号的傅里叶级数表示
- lintcode,全排列
- CNN-目标检测、定位、分割
- @Autowired - No qualifying bean of type found for dependency
- 拆轮子系列:拆 RxJava
- 创建一个bmp格式的简单方法
- Opencv入门之--二
- 各版本bool的区别
- 【JZOJ 4922】环
- 编码:隐匿在计算机软硬件背后的语言(8)--自动操作(二)