LeetCode:全排列【46】

LeetCode:全排列【46】

题目描述

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

示例:

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

题目分析

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

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

  

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

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

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

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);
      }
   }
} 

原文地址:https://www.cnblogs.com/MrSaver/p/9934852.html

时间: 2024-11-08 19:45:27

LeetCode:全排列【46】的相关文章

LeetCode 第46题 全排列

给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路: dfs 1) 将每个元素放到他可能存在的位置,效率较低,每次需花O(n) 时间检查该元素是否被选取过 比如: [1 ,2 ,3] root / | \ / | \ 下标0: 1 2 3 / \ / \ / \ 下标1: 2 3 1 3 1 2 / \ / \ / \ 下标2: 3 2

LeetCode(46):全排列

Medium! 题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 解题思路: 这道题是求全排列问题,给的输入数组没有重复项,这跟之前的那道Combinations 组合项 和类似,解法基本相同,但是不同点在于那道不同的数字顺序只算一种,是一道典型的组合题,而此题是求全排列问题,还是用递归DFS来求解.这里我们需要用到一个visi

[LeetCode] “全排列”问题系列(一) - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题

转:http://www.cnblogs.com/felixfang/p/3705754.html 一.开篇 Permutation,排列问题.这篇博文以几道LeetCode的题目和引用剑指offer上的一道例题入手,小谈一下这种类型题目的解法. 二.上手 最典型的permutation题目是这样的: Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the foll

[LeetCode] “全排列”问题系列(二) - 基于全排列本身的问题,例题: Next Permutation , Permutation Sequence

一.开篇 既上一篇<交换法生成全排列及其应用> 后,这里讲的是基于全排列 (Permutation)本身的一些问题,包括:求下一个全排列(Next Permutation):求指定位置的全排列(Permutation Sequence):给出一个全排列,求其所在位置. 二.例题 1. 求下一个全排列,Next permuation Implement next permutation, which rearranges numbers into the lexicographically ne

&lt;LeetCode OJ&gt; 46. Permutations

46. Permutations My Submissions Question Total Accepted: 81495 Total Submissions: 239854 Difficulty: Medium Given a collection of distinct numbers, return all possible permutations. For example, [1,2,3] have the following permutations: [1,2,3], [1,3,

LeetCode(46)Permutations

题目 Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the following permutations: [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1]. 分析 求给定向量数组所有元素的全排列问题. 我们知道n个元素有n!种全排列,而STL底层文件< algorithm >中有关于排列元素的标

白菜刷LeetCode记-46. Permutations

今天这一题也是中等难度,题目如下: 这一题是要实现数组的全排列.这一题是要使用遍历以及递归的思想去实现,代码如下: 1 /** 2 * @param {number[]} nums 3 * @return {number[][]} 4 */ 5 var permute = function(nums) { 6 var res = new Array(); 7 8 helper(nums, 0, nums.length - 1 , res); 9 10 return res; 11 }; 12 1

LeetCode——全排列

给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3]输出:[  [1,2,3],  [1,3,2],  [2,1,3],  [2,3,1],  [3,1,2],  [3,2,1]] import java.util.ArrayList;import java.util.List;import java.util.Stack; public class FullSort { private List<List<Integer>> lists = new

FDGSDFGSDFGfdgdsfgsdfgsdfgsdfg

http://weishi.qq.com/tag/%E5%A7%8B%E5%85%B4%E6%89%BE%E5%B0%8F%E5%A6%B9%E7%94%B5%E8%AF%9D%E2%96%93%E9%AA%9A%E5%A5%B3%E2%96%93%54%45%4C%5F%E3%80%90%31%38%35%46%36%35%35%35%46%32%35%31%34%E3%80%91%E5%A9%B7%E5%A9%B7%32%30%31%35%2D%30%34%2D%30%31.html htt