给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回

简介:

class Solution {

public List<List<Integer>> permute(int[] nums) {
    List<List<Integer>>  result = new ArrayList<>();
    if(nums.length == 0){
        return result;
    }

    ValueRecord[] valueRecords = new ValueRecord[nums.length];
    for(int i = 0; i<nums.length;i++){
        ValueRecord valueRecord = new ValueRecord();
        valueRecord.value = nums[i];
        valueRecords[i] = valueRecord;
    }
    List<Integer> path = new ArrayList<>();
    dfs(nums, path, valueRecords, result);
    return result;
}

/**
 *
 **/
private void dfs(int[] nums, List<Integer> path, ValueRecord[] valueRecords, List<List<Integer>>  result ){
    if(path.size() == nums.length){
        result.add(new ArrayList(path));
        return;
    }

    for(int currIndex = 0; currIndex<nums.length;currIndex++){
        ValueRecord valueRecord = valueRecords[currIndex];
        if(!valueRecord.isValid){
            continue;
        }
        valueRecord.isValid = false;
        path.add(valueRecord.value);
        dfs(nums, path, valueRecords, result);
        path.remove(path.size()-1);
        valueRecord.isValid = true;
    }
}

public static class ValueRecord{
    int value;
    boolean isValid = true;
}

}

目录
相关文章
|
7月前
|
算法
【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置
【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置
|
13天前
leetcode题解:28.找出字符串中第一个匹配项的下标
leetcode题解:28.找出字符串中第一个匹配项的下标
9 0
|
2月前
|
索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
|
2月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
49 0
|
12月前
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
165 0
​判断给定字符序列是否是回文
​判断给定字符序列是否是回文
54 0
|
存储 算法 JavaScript
寻找数组中的重复数字
寻找数组中的重复数字
寻找数组中的重复数字
统计字符串中元素的个数(多种方法)
统计字符串中元素的个数(多种方法)
145 0
统计字符串中元素的个数(多种方法)