首页 > 其他分享 >leet code 46. 全排列

leet code 46. 全排列

时间:2023-11-11 15:00:52浏览次数:36  
标签:leet code nums 46 List chosed used ans new

46. 全排列

题目描述

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。

你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]

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

示例 2:

输入:nums = [0,1] 输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1] 输出:[[1]]

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

题目解析

  • 全排列问题
  • 根据题意,需要求得所有的排列可能,如下图
  • 把每一种可能加入到结果集中,最终得到答案
  • 由于选择过的元素不能重复使用,所以需要额外记录当前元素是否被选择使用过

show code

class Solution {

    private List<List<Integer>> ans;

    public List<List<Integer>> permute(int[] nums) {
        ans = new ArrayList<>();
        // 创建一个数组,记录被选择过的元素
        boolean[] used = new boolean[nums.length];
        // 创建一个 集合 用于保存被选择的元素
        List<Integer> chosed = new ArrayList<>();
        // 进入回溯算法
        bt(nums, used, chosed);
        return ans;
    }

    private void bt(int[] nums, boolean[] used, List<Integer> chosed) {
        // 终止条件  如果选择的元素个数 等于 数组长度
        if(nums.length == chosed.size()) {
            // 加入到结果集合中
            ans.add(new ArrayList<>(chosed));
            return;
        }

        // 遍历 nums 数组
        for(int i = 0;i < nums.length;i++) {
            if(used[i]) {
                // 如果被选择过了,跳过.
                continue;
            }
            // 选择当前元素
            chosed.add(nums[i]);
            // 标记选择
            used[i] = true;
            // 回溯
            bt(nums, used, chosed);
            // 移出集合
            chosed.remove(chosed.size() - 1);
            // 取消标记
            used[i] = false;
        }
    }

}

标签:leet,code,nums,46,List,chosed,used,ans,new
From: https://blog.51cto.com/u_16079703/8318259

相关文章

  • CodeWhisperer 史上最强大的 AI 编程助手!!
    最近用了一个叫CodeWhisperer的插件,这个软件对于来说开发人员,插件有好多实用的功能,能有效减少我们的重复性工作,让编码更高效,代码质量也提升了很多。CodeWhisperer简介CodeWhisperer是亚⻢逊出品的一款基于机器学习的通用代码生成器,可实时提供代码建议。在编写代码时,它会自......
  • Codeforces Round 908 (Div. 2) A-D
    SecretSport观察到数据不大,直接摁住x和y枚举即可,方案合法当且仅当刚好打若干局,且赢最后一局的人是赢家#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn;cin>>n;strings;cin>>s;//xintwina=0,winb=0;for(inti=1;i<=n......
  • Codeforces Round 887 (Div. 2)
    https://codeforces.com/contest/1853C题感觉很不好写的样子,首先通过打表发现最后答案每次都是+n,那么我们考虑前i个,假如当前的ans+i仍然小于a[i+1],则没有影响,我们依然可以直接往后跳,否则,我们越过了a[i+1],那么我们应当加上i+1,注意,这有可能会导致往后面继续跳,比如13567,我们跳......
  • VS Code搭建Node.js环境
    VSCode搭建Node.js环境VSCode集成了方便的Node.js插件,使您可以轻松安装和配置Node.js环境。您可以采用以下步骤来搭建Node.js环境。1.安装VSCode在VSCode官网上下载并安装VSCode2.安装Node.js插件在VSCode插件市场中搜索并安装“Node.js”扩展3.配置Node.js路径单......
  • vscode配置Remote-SSH插件远程登录
    使用private-key实现免密登陆配置:在SSH配置文件(通常是'~/.ssh/config')中,你可以使用'IdentityFile'指令来指定私钥文件,这个指令用于指定身份验证的私钥文件路径。编辑config文件Hostexample.comHostNameexample.comUseryour_usernameIdentityFile~/.ssh/your_priv......
  • [Mac软件]Adobe Media Encoder 2024 V24.0.2免激活版
    软件说明使用MediaEncoder,您将能够处理和管理多媒体。插入、转码、创建代理版本,并几乎以任何可用的格式输出。在应用程序中以单一方式使用多媒体,包括PremierePro、AfterEffects和Audition。紧密整合与AdobePremierePro、AfterEffects、Audition和其他应用程序无缝快速地交互......
  • AtCoder Beginner Contest(abc) 322
    B-PrefixandSuffix难度:⭐题目大意给定两个字符串t和s,如果t是s的前缀则输出1,如果是后缀则输出2,如果都是则输出0,都不是则输出3;解题思路暴力即可;神秘代码#include<bits/stdc++.h>#defineintl1ngl1ng#defineIOSios::sync_with_stdio(false),cin.......
  • Windows10+VSCode+cmake+opencv+ffmpeg+sdl2环境配置
    一、概述在Windows10上配置一个C++开发环境:工具:VSCode编译器:Mingw64(使用gcc进行编译)构建工具:CMake第三方库:集成OpenCV、FFmpeg、SDL2二、操作步骤1.安装mingw64并配置bin目录到环境变量2.下载VSCode并安装3.安装CMake并......
  • Codeforces Round 903 (Div. 3) ABCDE
    CodeforcesRound903(Div.3)ABCDEA.Don'tTrytoCount题意:复制\(s\)串若干遍,是否能在\(s\)串中找到\(t\)串。思路:直接暴力,注意不要超限,会MLE//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+......
  • leet code 983. 最低票价
    983.最低票价题目描述在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为days的数组给出。每一项是一个从1到365的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为costs[0]美元;一张为期七天的通......