【100题】第五十三题 字符串的全排列

递归求解思路:

1)  每个元素依次放到首位,然后对其余元素递归

2)  当当前元素到达末尾的时候,输出该序列

关键是:

      每个元素交换完,之后要交换过来。每个元素依次放到首位,

      for(int i=currentIndex;i<=n;++i){ swap  从i+1递归  swap  }

 

#include<stdio.h>
#include<stdlib.h>
#define SWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
int score=0;
void perm(int *list,int i,int n)
{int j,temp;if(i==n){for(j=0;j<=n;j++){printf("%d ",list[j]);}printf("\n");score++;}else{for(j=i;j<=n;j++){SWAP(list[i],list[j],temp);perm(list,i+1,n);SWAP(list[i],list[j],temp);}}
}
int main()
{int list[]={1,2,3};perm(list,0,2);printf("Thetotal number is %d\n",score);system("pause");
}


 

String 版本

 

#include <iostream>
using namespace std;void Permutation(string pStr, int k, int n)
{if(k==n)cout<<pStr<<endl;for(int i=k;i<n;++i){swap(pStr.at(i),pStr.at(k));Permutation(pStr, k+1,n);swap(pStr.at(i),pStr.at(k));}     }int main()
{strings="abcdef";Permutation(s,0,s.length());
}


 

二,扩展

如果不是求字符的所有排列,而是求字符的所有组合,应该怎么办呢?(P72
   

思路:这里不采用交换方式,而是采用删减的方式。采用不同的剔除顺序,并用prex保留删减值,这样将得到所有符合条件的序列

  

#include  <iostream>
using namespacestd;
voidselect(string str, string prex)
{string temp=str;cout<<prex<<endl;for(int i=0;i<str.length();++i){select(str.erase(i,1),prex+str.at(i));str=temp;}     }int main()
{string s="abcd";select(s,"");
}


扩展二:

当输入的字符串中含有相同的字符串时,相同的字符交换位置是不同的排列,但是同一个组合。
    
举个例子,如果输入aaa,那么它的排列是6aaa,但对应的组合只有一个。

转载于:https://www.cnblogs.com/secbook/archive/2012/08/22/2654956.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java printwriter 文件_java – 如何使用printwriter创建和写入文件

我的代码看起来像这样File Fileright new File("C:\\GamesnewOrder.txt");PrintWriter pw new PrintWriter(Fileright);for(int i 0;i<Games2.length-1;i){pw.println(Games2[i]);}pw.close();我确实有throwsIOException的main方法.错误java.iofilenotfound异常…

造作吧,Python快速入门!

双十一的刀口还没愈合&#xff0c;双十二的折扣又戳到了胸口。买买买&#xff0c;还是小天最懂你看看小天都准备了什么&#xff01;课程限时优惠&#xff0c;网易云课堂平台优惠券&#xff0c;优惠叠加&#xff0c;课程包更享折上折&#xff01;双十二年终钜惠&#xff0c;还犹…

C# Hashtable和Dictionary区别

Hashtable和Dictionary都是.Net下的表示键值对的集合&#xff0c;那么我们在使用中该选择Hashtable还是Dictionary&#xff1f;下边我们看看他们之间的区别&#xff1a;1、Dictionary<K,V>在使用中是顺序存储的&#xff0c;而Hashtable由于使用的是哈希算法进行数据存储&…

java中如何运行小程序_一起学java(一)——运行第一个小程序

接下来的一段时间内会更新一起学java系列&#xff0c;喜欢的关注一下我吧。微信公众号&#xff1a;什么都不懂的大佬&#xff1b;初学&#xff0c;有错误的地方请大家多多指教。---------------分割线--------------一. 什么是java&#xff1f;java是一门面向对象的计算机编程语…

一分钟教你用Excel从统计局抓数据!

全世界只有3.14 % 的人关注了数据与算法之美现在呢&#xff0c;从网上爬虫数据来做分析越来越火&#xff0c;如果不会这个skillset做数据处理简直没办法装逼。作为一个兴趣广泛的高能物理phd&#xff0c;自然不能被时代落下。首先声明&#xff0c;我并没有学过HTML的语言&#…

snmpd服务无法更改默认端口

问题描述&#xff1a; 修改/etc/rc.d/init.d/snmpd的启动脚本 修改行&#xff1a; OPTIONS"-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a" 修改为 OPTIONS"udp:9999 -Lsd -Lf /dev/null -p /var/run/snmpd.pid -a" service snmpd start 时无法启动该服务&…

java 日期 区间_如何实现时间区间的分割??

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class Test {public static void main(String[] args) {String a "2014-8-1 16:09";Str…

记一次 .NET 某HIS系统后端服务 内存泄漏分析

一&#xff1a;背景 1. 讲故事前天那位 his 老哥又来找我了&#xff0c;上次因为CPU爆高的问题我给解决了&#xff0c;看样子对我挺信任的&#xff0c;这次另一个程序又遇到内存泄漏&#xff0c;希望我帮忙诊断下。其实这位老哥技术还是很不错的&#xff0c;他既然能给我dump&a…

freemarker 内置函数

2019独角兽企业重金招聘Python工程师标准>>> 在我们应用Freemarker过程中&#xff0c;经常会操作例如字符串&#xff0c;数字&#xff0c;集合等&#xff0c;却不清楚Freemrker有没有类似于Java一样有相关的类及方法。在本文当中&#xff0c;我将向大家详细的介绍Fr…

专业学习频道,欢迎关注数锐学堂

数锐学堂简介&#xff1a;致力于深耕数学领域的科普学习、竞赛、机器学习等算法技能应用优质课程&#xff0c;精心打造一站式的数学垂直领域教育服务。长按二维码可以关注如果识别二维码有问题请搜索微信号&#xff1a;supermodeling

在非容器(集群)环境下运行dapr

作者&#xff1a;李俱顺原文&#xff1a;https://www.4async.com/2021/03/2021-03-11-running-dapr-without-container/前一段时间一直关注的dapr正式发布了v1.0版本(实际上本文发布时还更新了v1.0.1)&#xff0c;代表dapr在某些程度上进入稳定状态&#xff0c;可以尝试在实际中…

【Silverlight5矢量打印】如何用C#代码检测打印机和驱动是否支持PostScript

Silverlight5支持PostScript矢量打印&#xff0c;矢量打印相比于位图打印速度更快&#xff0c;生成的打印文件更小。SL5默认会采用PS矢量打印&#xff0c;如果打印机不支持&#xff0c;自动切换到位图打印。 虽然微软SL打印组认为PS已经相当普遍&#xff0c;但我想大多数打印机…

用魔法打开科学,孩子惊叫连连,想不爱科学都难!

随着当今科技快速发展&#xff0c;和大家对于人工智能快速崛起的担忧&#xff0c;父母们对于孩子科学能力的培养&#xff0c;已经紧锣密鼓的提上了早教日程。看看近两年早教市场里火爆的课程&#xff0c;“少儿编程”、“儿童机器人教育”、“儿童STEAM课程”等等便是印证了这一…

java反射 获取局部变量_Java反射:如何获取变量的名称?

呼唤远方如果您使用以下的调试信息进行编译&#xff1a;javac -g)&#xff0c;局部变量的名称保存在.class文件中。例如&#xff0c;以这个简单的类为例&#xff1a;class TestLocalVarNames {public String aMethod(int arg) {String local1 "a string";StringBuil…

ML.NET Cookbook:(1)如何从文本文件加载数据?

TextLoader 用于从文本文件加载数据。您需要指定什么是数据列、它们的类型以及在文本文件中的位置。请注意&#xff0c;完全加载文件的某些列或多次加载同一列是完全可以接受的。示例文件[1]:Label Workclass education marital-status 0 Private 11th Never-married 0 Private…

svn服务端及客户端搭建和使用(三)

接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等.添加文件在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图:这时候,你需要告知TortoiseSVN你的操作,如图:加入以后,你的文件会变成这个状态,如图:这时…

Python的小宇宙,怎么样才能发挥出来?

随着科技的发展&#xff0c;计算机对人类的生产活动和社会活动产生了极为重要的影响&#xff0c;同时以强大的生命力飞速发展着。目前计算机正广泛用于社会各个领域&#xff0c;并朝着微型化、网络化、智能化和巨型化的方向前进。而随着计算机飞速发展的背后&#xff0c;人工智…

java生成tga图片_Java TGA加载器

我们使用从一些开源项目复制的这个类来读取TGA文件.它真的很老了.它只能处理具有最基本编码的Targa文件.试试看.public class TargaReader{public static Image getImage(String fileName) throws IOException{File f new File(fileName);byte[] buf new byte[(int)f.length(…

面试腾讯,过了~

大概需要10分钟。原谅下&#xff0c;又标题党了&#xff0c;不过这篇会提到我应届面试腾讯的经历。前两天在朋友圈发了一条动态&#xff1a;要做读者朋友的指路小火苗&#xff0c;很多人在状态下留言&#xff1a;为啥不是指路明灯&#xff1f;为啥不是小油灯&#xff1f;原因很…

传说中理科生看到会沉默、文科生看到会流泪的【程序员文史综合题目】

全世界只有3.14 % 的人关注了数据与算法之美一、单选题1、以下谁是二进制思想的最早提出者&#xff1f;a&#xff0c;伏羲&#xff1b;b&#xff0c;姬昌&#xff1b;c&#xff0c;莱布尼茨&#xff1b;d&#xff0c;柏拉图。2、以下哪个概念和公孙龙的《指物论》中的“指”字含…