• 46. 全排列-dfs回溯-中等难度


    问题描述

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

    示例:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/permutations

    解答

    //类似于八皇后那道题。
    class Solution {
        List<List<Integer>> list1;
        public void dfs(int[] nums, List<Integer> temp, int index, int size, int temp_size){
            if(index >= size){
                if(temp_size == size){
                    list1.add(new ArrayList<Integer>());
                    list1.get(list1.size()-1).addAll(temp);
                    temp.remove(temp_size - 1);
                    temp_size--;
                }
                int i = Arrays.binarySearch(nums, temp.get(temp_size - 1));
                temp.remove(temp_size - 1);
                temp_size--;
                if(i+1 >= size && temp_size == 0)return;
                dfs(nums, temp, i+1, size, temp_size);
            }
            if(index < size){
                if(!temp.contains(nums[index])){
                    temp.add(nums[index]);
                    temp_size++;
                    dfs(nums, temp, 0, size, temp_size);
                }else{
                    dfs(nums, temp, index+1, size, temp_size);
                }
            }
        }
        public List<List<Integer>> permute(int[] nums) {
            list1 = new ArrayList<List<Integer>>();
            if(nums.length == 0){
                list1.add(new ArrayList<Integer>());
                return list1;
            }
            else if(nums.length == 1){
                List<Integer> t = new ArrayList<Integer>();
                t.add(nums[0]);
                list1.add(t);
                return list1;
            }
            Arrays.sort(nums);
            dfs(nums, new ArrayList<Integer>(), 0, nums.length, 0);
            return list1;
        }
    }
  • 相关阅读:
    Linux内核编译測试
    Matlab pchiptx
    汇编 -- Hook API (MessageBoxW)
    三种SVM的对偶问题
    JAVA性能优化的五种方式
    C++字符串操作笔试题第二波
    JavaScript实现拖拽预览,AJAX小文件上传
    vijos-1382 寻找主人
    百度2015商务搜索实习面试总结
    [Swift]LeetCode790. 多米诺和托米诺平铺 | Domino and Tromino Tiling
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13336980.html
Copyright © 2020-2023  润新知