字典序全排列题解(Java实现,以北京大学考研机试题为例)_java字典序全排列代码解析-程序员宅基地

技术标签: 算法  java  蓝桥杯  开发语言  

题目

在这里插入图片描述

分析(需要结合我之前上一篇全排列文章来看)

在之前全排列的文章进行进一步理解
之前的文章全排列是只交换起始位置和待排在第一位的元素进行互换,而其他元素不变,待第一趟全排列之后再回溯之前交换的元素位置。而这次题目要求的字典序全排列则是多了一个需求,即是在交换的起始元素位置和待交换元素的位置之间数组依次左移,相对应在一次排列后就要换成右移。

代码实现

import java.util.*;
public class Main{
    
    static void perm(char a[],int p,int q){
    
        if(p==q){
    
            for(int i=0;i<a.length;i++){
    
                System.out.print(a[i]);
            }
            System.out.println();
        }else{
    
            for(int i=p;i<a.length;i++){
    
                char temp = a[i];
                // a[i] = a[p];
                for(int k=i-1;k>=p;k--){
    
                    a[k+1]=a[k];
                }
                a[p] = temp;
                
                perm(a,p+1,q);
                
                char temp1 = a[p];
                // a[i] = a[p];
                for(int k=p+1;k<=i;k++){
    
                    a[k-1] = a[k];
                }
                a[i] = temp1;
            }
        }
    }
    public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        char a[] = s.toCharArray();
        perm(a,0,a.length);
    }
}

运行结果

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46371813/article/details/123458714

智能推荐

小学语文生字表2490字(带拼音)_月一了;乙;6;去好也;大;9;了;9一;9-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏4次。一年级上册生字: 100个  识字(一)  1、一(yī) 二(èr) 三(sān)  2、十(shí) 木(mù) 禾(hé)  3、上(shàng) 下(xià) 土(tǔ) 个(gè)  4、八(bā) 入(rù) 大(dà) 天(tiān)  课文  1、人(rén) 火(huǒ) 文(wén) 六(liù)  2、七(qī) 儿(ér) 九(jiǔ) 无(_月一了;乙;6;去好也;大;9;了;9一;9

BeetlSql简介及举例_beetsql-程序员宅基地

文章浏览阅读7.9k次,点赞4次,收藏15次。本文参考BeetlSql官方网站,官网网站请点击这里~ BeetSql是一个全功能DAO工具,同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。 在开发效率上,无需注解,自动使用大量内置SQL,轻易完成增删改查功能。数据模型支持Pojo,也支持Map/Lis..._beetsql

试论软件的可靠性及其保证_软件可靠性需求怎么写-程序员宅基地

文章浏览阅读2.5w次,点赞4次,收藏17次。试论软件的可靠性及其保证来源:ChinaItLab 用软件系统规模越做越大越复杂,其可靠性越来越难保证。应用本身对系统运行的可靠性要求越来越高,在一些关键的应用领域,如航空、航天等,其可靠性要求尤为重要,在银行等服务性行业,其软件系统的可靠性也直接关系到自身的声誉和生存发展竞争能力。  特别是软件可靠性比硬件可靠性更难保证,会严重影响整个系统的可靠性。在许多项目开发过程中,对可_软件可靠性需求怎么写

新手前端微信小程序img图片无法显示问题_微信小程序js引入图片前端不显示-程序员宅基地

文章浏览阅读2.5w次,点赞21次,收藏23次。最近自己在做毕设,是一个微信小程序,虽然自己有一点前端开发经验,以为小程序前端和这个差不多可以直接开撸,但是这两天被一些图片问题烦了好久。这也是自己第一次写博客,实在太生气了,网上也没找到自己想要的结果,所以写下来记录下来,顺便让和我一样错误的人知道咋解决,笑cry,虽然真的很低级的错误。以下是遇到的问题。 1:在开发者工具可以显示图片,手机预览,真机调试却看不到。 2:在最开始的ipho..._微信小程序js引入图片前端不显示

JSON百科全书:学习JSON看这一篇就够了-程序员宅基地

文章浏览阅读2.8k次,点赞10次,收藏51次。JSON 对象包含两个方法:用于解析 JavaScript Object Notation(JSON)的 parse() 方法,以及将对象/值转换为 JSON 字符串的 stringify() 方法。除了这两个方法,JSON 这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。_json

【电子基础】总结·嵌入式硬件基础_哈佛j80c电源板-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏9次。嵌入式系统硬件基础By 成鹏致远第一章 常用硬件——>嵌入式系统常用的硬件器件,主要包括分立器件、光电半导体、逻辑IC、模拟IC以及存储器共五大类——>分立器件主要有:二极管、三极管、电阻、电容、电感以及场效应管等——>二极管的主要特性是单向导电性——>二极管按其用途可分为:整流二极管、稳压二极管、开关二极管、发光二极管等——>整流二级管是一种将交流电转变为直流电的半导体器件,主要用于各种低频整流_哈佛j80c电源板

随便推点

揭开native event的面纱_nativeevent-程序员宅基地

文章浏览阅读2k次。 这是我的第3篇关与native event的随笔。第一篇对native event作了简介。第二篇报告一个BUG(MSVC TEAM说这是一个以知的BUG,可是在VC8Express里仍然存在)。这一篇我们看看native event是如何实现的,并且尝试解决我们遇到的BUG。 从VC7(Microsoft Visual C++ .NET (2002) )开始MSVC提供了native eve_nativeevent

Java加密算法 AES_aes的java加密算法-程序员宅基地

文章浏览阅读771次。[java] view plaincopyprint?package com.stone.security; import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.Se_aes的java加密算法

swagger 设置全局token_swagger加全局token-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏5次。1. 在swaggerConfig 配置文件中定义一个bean如果不知道swaggerConfig可看之前发布swagger的配置文章https://blog.csdn.net/luChenH/article/details/90763812 @Bean SecurityScheme securityScheme() { return new ApiKey("token", "token", "header"); }名字根据自己需要变更,我这边就是tok._swagger加全局token

nginx + lua + redis 防刷和限流_nginx + lua + redis 限速带宽-程序员宅基地

文章浏览阅读3.1w次,点赞8次,收藏46次。防刷和限流的概念是:防刷的目的是为了防止有些IP来爬去我们的网页,获取我们的价格等信息。不像普通的搜索引擎,这种爬去行为我们经过统计最高每秒300次访问,平均每秒266次访问。由于我们的网站的页面都在CDN上,导致我们的CDN流量会定时冒尖。为了防止这种情况,打算将网页页面的访问从CDN切回主站。同时开启防刷功能,目前设置一秒200次访问即视为非法,会阻止10分钟的访问。限流的目的_nginx + lua + redis 限速带宽

hive 窗口函数总结及使用案例_hive 窗口函数的执行顺序-程序员宅基地

文章浏览阅读700次。1. 窗口函数和普通聚合函数的区别聚合函数是将多条记录合并为一条;窗口函数是每条记录都会执行,原来有几条记录最终执行完还是几条聚合函数也可以用于窗口函数:窗口函数在逻辑上的执行顺序是在FROM、JOIN、WHERE、GROUP BY 、HAVING 之后,在ORDER BY、LIMIT、SELECT DISTINCT之前。它执行之前GROUP BY的聚合过程已经完成了,所以不会再产生数据聚合。注:窗口函数是在 WHERE 之后执行的,所以如果 WHERE 子句需要用窗口函数作为条件,需要多套一层子_hive 窗口函数的执行顺序

Windows11 - 使用 sftp连接 CentOS 7,实现文件上传与下载_windows连接sftp-程序员宅基地

文章浏览阅读4.3k次。Windows11 -使用sftp连接CentOs 7,实现文件上传与下载_windows连接sftp