LeetCode:全排列【46】

题目描述

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

示例:

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

题目分析

  首先题目给了一个没有重复数字的序列,它的全排列也一定不含重复数字。我们采用回溯框架法快速解题。

  我们就简单思考一个问题,每个排列的第一个元素是如何生成的!

我们从左往右,首先我们将a加入tmpList(临时存储排列的线性表)中,此后再从它下一个位置开始找第二个、第三个数字,最后生成排列存储在结果中。我们再将1作为第一个元素开始处理后,赶紧把他删了,再将b加入到tmpList中,此后再从它下一个位置开始找第二个、第三个数字,最后生成排列存储在结果中....

  也就是说处理第i个位置的元素时,就要考虑到i位置的所有取值,我们在处理为a的元素后,赶紧把他删了处理为b的元素.....这样第i个位置就有所有的情况了

  

  知道这个以后,我们就可以得到在一个数组中选出所有N个数的组合。

  我觉得这一段讲的并不是特别清楚,我只是在讲某一层的元素要如何处理,该层要考虑所有元素,就在处理后某个元素后,再把该层腾空,让给其他元素。

Java题解

public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
// Arrays.sort(nums); // not necessary
backtrack(list, new ArrayList<>(), nums);
return list;
} private void backtrack(List<List<Integer>> list, List<Integer> tempList, int [] nums){
if(tempList.size() == nums.length){
list.add(new ArrayList<>(tempList));
} else{
for(int i = 0; i < nums.length; i++){
if(tempList.contains(nums[i])) continue; // element already exists, skip
tempList.add(nums[i]);
backtrack(list, tempList, nums);
tempList.remove(tempList.size() - 1);
}
}
}

最新文章

  1. CTP程序化系统开发(C++ &amp;&amp; PHP)
  2. 本地项目上传到GitHub
  3. 修改TNSLSNR的端口
  4. css变形 transform【转】
  5. Android View的onTouchEvent和OnTouch区别
  6. linux的bash 终端操作快捷键
  7. jquery获取文本框的内容
  8. struts2文件上传,文件类型 allowedTypes
  9. Android智能手机屏蔽电话与屏蔽安装软件功能
  10. Sublime Text3下如何快速搭建开发环境
  11. LeetCode OJ 62. Unique Paths
  12. java设计模式(1)
  13. javaScript高级程序设计笔记 1
  14. spring Boot异步操作报错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type &#39;com.self.spring.springboot.Jeep&#39; available
  15. mysql 开发基础系列9 存储引擎 MyISAM 介绍
  16. windows 解放鼠标快捷键
  17. Vuex异步请求数据通过computed计算属性值
  18. leetcode79
  19. HttpServerProvider实现http服务接口(一)
  20. hhvm

热门文章

  1. iOS10 获取系统通讯录新方法
  2. 实战c++中的string系列--std::string与MFC中CString的转换
  3. Redis 过期时间
  4. zookeeper 批量启动的脚本
  5. Mybatis在IDEA中使用generator逆向工程生成pojo,mapper
  6. docker导入导出
  7. Linux 实用工具vi
  8. 枚举callback还是返回列表 ?
  9. 怎样在Mac OS X上面指定Eclipse启动时用指定的某一版本号JDK?
  10. windows下编译boost for android