数组的全排列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言


一、题目

给出一个数字,请写出他的全排列

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

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

二、学习的算法

时间回溯算法,通过递归和还原构成

java 复制代码
import java.util.*;

public class Permutation {
    public static void main(String[] args) {
        int num = 123;
        String str = String.valueOf(num);
        List<String> result = new ArrayList<>();
        permute(str.toCharArray(), 0, result);
        
        for (String s : result) {
            System.out.println(s);
        }
    }
    
    static void permute(char[] arr, int start, List<String> result) {
        if (start == arr.length) {
            result.add(new String(arr));
            return;
        }
        
        for (int i = start; i < arr.length; i++) {
            swap(arr, start, i);
            permute(arr, start + 1, result);
            swap(arr, start, i);
        }
    }
    
    static void swap(char[] arr, int i, int j) {
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

三.自己的想法

一位位取得每位数字,并写入0-9字典计数。

从最高位开始,从小到大排列,直到完全从大到小排列,就认为完成一次全排列

例如123排成321就认为排序完成


总结

如果一个题十分钟内还没有想法,可能就是做不出来

相关推荐
☆5665 小时前
基于C++的区块链实现
开发语言·c++·算法
jgbazsh5 小时前
Redis6.2.6下载和安装
java
于先生吖5 小时前
JAVA 本地生活服务项目实战 家政 5.0 系统前后端分离部署
java·开发语言·生活
ysa0510305 小时前
迷宫传送[最短路径]
c++·笔记·算法·深度优先
左左右右左右摇晃5 小时前
数据结构——链表
数据结构·链表
计算机安禾5 小时前
【数据结构与算法】第5篇:线性表(一):顺序表(ArrayList)的实现与应用
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
仰泳的熊猫5 小时前
题目2584:蓝桥杯2020年第十一届省赛真题-数字三角形
数据结构·c++·算法·蓝桥杯
2401_864959285 小时前
C++与Python混合编程实战
开发语言·c++·算法
左左右右左右摇晃5 小时前
Java并发——锁的状态演变
java·开发语言·笔记
2501_945424805 小时前
C++与硬件交互编程
开发语言·c++·算法