全排列问题

2023-11-19

问题描述

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有 'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入 

输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在 1 到 6之间。

输出

输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知 S=s1​s2​...sk​,T=t1​t2​...tk​,则S<T 等价于,存在p(1≤p≤k),使得 s1​=t1​,s2​=t2​,...,sp−1​=tp−1​,sp​<tp​ 成立。

Sample 1

Inputcopy Outputcopy
abc
abc
acb
bac
bca
cab
cba

解题思路 :我们可以发现规律,求abc的全排列就是求bc或ac或ab的全排列,求bc的全排列就是求b的全排列和c的全排列,我们可以定义一个函数void permutation(int k),表示从第k个位置开始摆放字母;

第一步就是在第k个位置摆放前面没有用过的字母,在选好第k个位置摆放的字母后,将其存在b[k]里 ;

第二步就是在第k+1个位置及之后的位置上摆放字母,我们可以通过再次调用这个函数,执行permutation(k+1)来实现;

 代码如下

#include<bits/stdc++.h>
using namespace std;

char a[500];//输入的字符串 
char b[500];//求出的排列 
int vis[100];//表示vis[i]中第i个字母是否用过 
int n;
void permutation(int k)//从排列的第k个位置开始往后摆放字母 
{
	if(k==n)//表示到达最后一个字母,不能再交换,最终的排列需要输出 
	{
		for(int i=0;i<k;i++) 
		printf("%c",b[i]);
		printf("\n");
	} 
	for(int i=0;i<n;i++)//在第k个位置穷举所有可能的放法 
	{
		if(vis[i]==0)//如果第i个字母没有用过 
		{
			vis[i]=1;//标志被用 
			b[k]=a[i];//选好第k个位置摆放的字母后,将其存在b[k]里 
			permutation(k+1);//下一位置递归调用 
			vis[i]=0;//恢复初始状态,取消第k个位置的放法,便于下一次尝试另一种放法 
		}
		
    }
}
int main(void)
{
	scanf("%s",a);
	n=strlen(a);
	permutation(0);
	return 0;
 } 

//我又写了一个数字全排列

输入一个整数n(1<=n<=9),输出由1~n组成的所有不重复的数字序列,每行一个序列

#include<bits/stdc++.h>
using namespace std;

int a[500];
int vis[100];
int n;
void dfs(int cur)
{
	if(cur==n)
	{
	for(int i=0;i<n;i++)
	printf("%d ",a[i]);
	printf("\n");
	}
	for(int i=1;i<=n;i++)
	{
		if(vis[i]==0)
		{
			vis[i]=1;
			a[cur]=i;
			dfs(cur+1);
			vis[i]=0;
		}
		
    }
}
int main(void)
{
	scanf("%d",&n);
	dfs(0); 
	return 0;
 } 

 注意:如果dfs(1)需要将cur=n+1

dfs(0)和dfs(1)出口不一样,一个是n,一个是n-1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全排列问题 的相关文章

  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • 大量互斥体对性能的影响

    假设我有一个包含 1 000 000 个元素的数组 以及多个工作线程 每个线程都操作该数组中的数据 工作线程可能会使用新数据更新已填充的元素 但每个操作仅限于单个数组元素 并且独立于任何其他元素的值 使用单个互斥锁来保护整个数组显然会导致高
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • C# 可以为控制台应用程序部分类“程序”类吗?

    我想知道是否可以将为任何控制台应用程序创建的默认 程序 类更改为部分类 我想这样做是因为我想要更好的组织 而不是将所有方法都放在按区域分类的 1 个文件中 对我来说 将某些方法类别放在单独的文件中会更有意义 我对分部类的理解是 它是多个文件
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • 在 Visual Studio 2012 Express 中设置 C++ 调试环境

    我需要调试的应用程序需要设置环境变量 这在 Visual Studio 2012 中似乎非常复杂 我想做类似的事情 set path c foo c bar c windows c program files application set
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • 为什么我可以在另一个函数中定义一个函数?

    请参阅下面的代码 我在另一个函数中定义了一个函数 void test1 void void test2 void printf test2 n printf test1 n int main void test1 return 0 这个用法
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem

随机推荐

  • Vue3.0的新特性(8)Suspense

    Suspense是Vue3推出的一个内置组件 它允许我们的程序在等待异步组件时渲染一些后备的内容 可以让我们创建一个平滑的用户体验 Vue中加载异步组件其实在Vue2 x中已经有了 我们用的vue router中加载的路由组件其实也是一个异
  • 风口之上,为什么说区块链能改变世界?

    近几年 区块链被炒得热火朝天 各大媒体都能看见区块链的身影 其中很多甚至开设了区块链或比特币频道 你甚至很难找到一个科技或垂直网站 在标题中没有至少一篇意为 区块链改变世界 的文章 它们想传达的是 比特币和其他加密货币底层的区块链技术是如何
  • Idea 报Error:java:无效的源发行版13

    首先打开自己的项目 点击File gt Settings进入界面找到如图位置 并将相信应位置设置成自己的安装版本号 本人使用 1 8版本 别忘了点击OK 下一步 点击File选择Project Structure 进入 还是看自己的安装版本
  • java如何查询并显示一个表,如何从表中获取数据并将其显示在Java的另一个表中?...

    将数据从一个表复制到另一个表的Netbean项目 希望这可以帮助 import javax swing table DefaultTableModel To change this license header choose License
  • 概率论【离散型二维变量与连续性二维变量(下)】--猴博士爱讲课

    6 连续型二维变量 下 1 7 求边缘分布函数 边缘概率密度 边缘概率密度 2 7 求边缘密度函数 边缘概率密度 3 7 判断连续型二维变量的独立性 F x y Fx X Fy Y 那么X Y互相独立 f x y fx X fy Y 那么X
  • 【论文阅读 08】Adaptive Anomaly Detection within Near-regular Milling Textures

    2013年 太老了 先不看 比较老的一篇论文 近规则铣削纹理中的自适应异常检测 1 Abstract 在钢质量控制中的应用 我们提出了图像处理算法 用于无监督地检测隐藏在全局铣削模式内的异常 因此 我们考虑了基于全局傅里叶的方法和局部剪切波
  • php判断2个多维数组是否相同,PHP如何判断一个数组是一维还是多维

    什么叫多维数组呢 多维数组 本质上是以数组作为数组元素的数组 二维数组又称为矩阵 一个数组的元素如果是一维数组 那么我们就称这个数组是二维数组 怎么判断一个数组是否是一维数组呢 通过count 函数 int count mixed var
  • 【FPGA】:频率测量

    转载 1 FPGA频率测量的三种方法 直接测量法 间接测量法 等精度测量法
  • Go中sync 包的 Once 使用

    文章目录 背景 One 简介 示例 注意 源码解读 背景 在系统初始化的时候 某些代码只想被执行一次 这时应该怎么做呢 没有学习 Once 前 大家可能想到 声明一个标识 表示是否初始化过 然后初始化这个标识加锁 更新这个标识 但是学会了
  • .net IOC之Spring.Net

    一 开发环境 编译器 VS2013 Net版本 net framework4 5 二 涉及程序集 Spring Core dll 1 3 Common Logging 三 开发过程 1 项目结构 2 添加Person cs namespac
  • 数码管电子时钟

    文章目录 前言 一 回顾数码管 二 任务描述 三 系统框图 四 模块调用 五 模块原理图 六 工程源码 6 2 时钟计数模块代码 6 2 数码管驱动模块代码 6 3 顶层模块代码 七 仿真测试 7 1 测试代码 7 2 仿真结果 八 管脚信
  • networkmanager无法打开

    中午登录ubuntu刚要连接无可线发现个的问题 无线的图标不见了 这可肿么办啊 怎么找都找不到 开始想系统还原 后来发现还挺麻烦的 毕竟菜鸟 系统方面的还不怎么懂 幸好有两台电脑 可以google 唉 最近两天google也不正常 今天也不
  • Llama 美洲鸵(大羊驼)改进之一:均方层归一化RMSNorm

    Layer Normalization LayerNorm Root Mean Square Layer Normalization RMSNorm 原理 对特征张量按照某一维度或某几个维度进行0均值 1方差的归一化 操作 LayerNor
  • 神经网络控制系统的特点,神经网络控制的优点

    什么是神经网络控制 神经网络控制技术是一项复杂的系统控制技术 一般应用在变频器的控制中 它是通过对系统的辨识 运算后对变频器进行控制的一种新技术 而且神经网络控制可以同时控制多个变频器 所以应用在多个变频器级联控制中比较合适 谷歌人工智能写
  • angularjs官方教程中的两处错误

    看到官方教程中HTTP小节之前还在向同事夸angularjs的教程做的厚道 没有什么坑 结果到http就出现了 发现了两处错误 度娘各种搜索没有发现相关的帖子 于是记录下来 希望能被高效收录 以解广大IT民工之困扰 getHero id n
  • stream流常用

    从一个List中获得每个object的对象的id组成一个list List
  • 卓越性能代码_「Win」被隐藏起来的卓越性能模式,为何不想让人发现?

    前言 众所周知 电脑电源管理中包含三大模式 分别是 节能模式 平衡模式 高性能模式 其对电脑的性能影响还是比较大的 但是今天所说的 卓越性能模式 应该很多人都没听说过 又是何方神圣 其为何要隐藏起来不想被人发现 如何开启 卓越性能 模式 右
  • LLaMA微调记录

    本文基于开源代码https github com Lightning AI lit llama tree main执行微调 其他参考链接 Accelerating LLaMA with Fabric A Comprehensive Guid
  • 实验二:使用KMP算法实现字符串的匹配

    1 实验目的 熟练的掌握数据结构中串这种数据类型 学会使用相较于朴素的模式识别算法更加先进的KMP算法进行识别和匹配 同时 在数据结构试验之中熟悉和了解串的性质和使用方法 2 实验要求 输入 通过命令行参数输入原字符串和模式字符串 输出 1
  • 全排列问题

    问题描述 给定一个由不同的小写字母组成的字符串 输出这个字符串的所有全排列 我们假设对于小写字母有 a lt b lt lt y lt z 而且给定的字符串中的字母已经按照从小到大的顺序排列 输入 输入只有一行 是一个由不同的小写字母组成的