46.全排列

给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

class Solution {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<List<Integer>>(); 
        tempPermute(nums, 0, res);
        return res;
    }
    
    public void tempPermute(int[] nums, int start, List<List<Integer>> res) {       
        if(nums.length - start < 2) {   //递归结束
            List<Integer> tmp = new ArrayList<Integer>();
            for(int i : nums) {
                tmp.add(i);
            }
            res.add(tmp);
            return;
        }
        // 把后面的数组元素交换到start位置,并对start+1剩下的元素进行全排列    
        for(int i = start; i < nums.length; i++) {
            swap(nums, start, i);
            tempPermute(nums, start + 1, res);
            swap(nums, start, i); // 部分全排完成再交换回去!!!
        }
    }
    
     private static void swap(int[] nums, int i1, int i2) {
        int temp = nums[i1];
        nums[i1] = nums[i2];
        nums[i2] = temp;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 全排列 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例 输入: [1,2,3]输出:[[1,...
    一只可爱的柠檬树阅读 1,384评论 0 0
  • 46. 全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3...
    杏仁小核桃阅读 8,242评论 0 0
  • 题意: 给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[...
    万物皆可膜阅读 1,079评论 0 0
  • 题目给定一个没有重复数字的序列,返回其所有可能的全排列。 示例:****输入: [1,2,3]输出:[[1,2,3...
    HITZGD阅读 1,885评论 0 0
  • 题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出:[[1,2,...
    夜空中最亮的星_6c64阅读 1,657评论 0 0