一个组合加全排列的面试算法题及其解

简介: 题目:         给定“abcdefg” 7个字母,写一个程序将其中任意的字母组合输出,要求每种组合中每个字母最多出现一次,字母的不同位置顺序算不同的组合,例如ab和ba是不同的组合。

题目:

        给定“abcdefg” 7个字母,写一个程序将其中任意的字母组合输出,要求每种组合中每个字母最多出现一次,字母的不同位置顺序算不同的组合,例如ab和ba是不同的组合。

分析:

       刚拿到题目时我就想用for循环穷举式的列出,但分析了一半分析不下去,因为是口述的题目,没有笔和纸来草算,所以当时没答上来。

      后来我回顾,用笔和纸演算时发现了一个规律:

  

     这个规律来自于“斐波那契数列”,就是每增加一个字母,这个结果就是这个字母与上一个结果的一个组合(交换顺序的组合)。于是我用java按照这种思想写了一个实现:

import java.util.ArrayList;
import java.util.List;

public class Test {

	//a,b,ab,ba,c,ac,ca,bc,cb,abc,cab,bac,d,ad,da,bd,db,abd,bad,cd,acd,bcd,adcd,bacd,...
	
	
	public static List<String> p(char c, List<String> li) {
		int length = li.size();
		li.add(String.valueOf(c));
		for(int i =0;i<length;i++){
			li.add(String.valueOf(c) + li.get(i));
			li.add(li.get(i) + String.valueOf(c));
		}
		return li;
	}

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		String s = "abcdefg";
		List<String> li = new ArrayList<String>();
		li.add(String.valueOf(s.charAt(0)));
		for (int i = 1; i < s.length();i++) {
			char c1 = s.charAt(i);
			li = p(c1, li);
		}
		for(String ss : li){
			System.out.print(ss +",");
		}
		System.out.println(li.size());
		System.out.println(System.currentTimeMillis() - start);
	}

}

结果是1093个组合,如下:

a,b,ba,ab,c,ca,ac,cb,bc,cba,bac,cab,abc,d,da,ad,db,bd,dba,bad,dab,abd,dc,cd,dca,cad,dac,acd,dcb,cbd,dbc,bcd,dcba,cbad,dbac,bacd,dcab,cabd,dabc,abcd,e,ea,ae,eb,be,eba,bae,eab,abe,ec,ce,eca,cae,eac,ace,ecb,cbe,ebc,bce,ecba,cbae,ebac,bace,ecab,cabe,eabc,abce,ed,de,eda,dae,ead,ade,edb,dbe,ebd,bde,edba,dbae,ebad,bade,edab,dabe,eabd,abde,edc,dce,ecd,cde,edca,dcae,ecad,cade,edac,dace,eacd,acde,edcb,dcbe,ecbd,cbde,edbc,dbce,ebcd,bcde,edcba,dcbae,ecbad,cbade,edbac,dbace,ebacd,bacde,edcab,dcabe,ecabd,cabde,edabc,dabce,eabcd,abcde,f,fa,af,fb,bf,fba,baf,fab,abf,fc,cf,fca,caf,fac,acf,fcb,cbf,fbc,bcf,fcba,cbaf,fbac,bacf,fcab,cabf,fabc,abcf,fd,df,fda,daf,fad,adf,fdb,dbf,fbd,bdf,fdba,dbaf,fbad,badf,fdab,dabf,fabd,abdf,fdc,dcf,fcd,cdf,fdca,dcaf,fcad,cadf,fdac,dacf,facd,acdf,fdcb,dcbf,fcbd,cbdf,fdbc,dbcf,fbcd,bcdf,fdcba,dcbaf,fcbad,cbadf,fdbac,dbacf,fbacd,bacdf,fdcab,dcabf,fcabd,cabdf,fdabc,dabcf,fabcd,abcdf,fe,ef,fea,eaf,fae,aef,feb,ebf,fbe,bef,feba,ebaf,fbae,baef,feab,eabf,fabe,abef,fec,ecf,fce,cef,feca,ecaf,fcae,caef,feac,eacf,face,acef,fecb,ecbf,fcbe,cbef,febc,ebcf,fbce,bcef,fecba,ecbaf,fcbae,cbaef,febac,ebacf,fbace,bacef,fecab,ecabf,fcabe,cabef,feabc,eabcf,fabce,abcef,fed,edf,fde,def,feda,edaf,fdae,daef,fead,eadf,fade,adef,fedb,edbf,fdbe,dbef,febd,ebdf,fbde,bdef,fedba,edbaf,fdbae,dbaef,febad,ebadf,fbade,badef,fedab,edabf,fdabe,dabef,feabd,eabdf,fabde,abdef,fedc,edcf,fdce,dcef,fecd,ecdf,fcde,cdef,fedca,edcaf,fdcae,dcaef,fecad,ecadf,fcade,cadef,fedac,edacf,fdace,dacef,feacd,eacdf,facde,acdef,fedcb,edcbf,fdcbe,dcbef,fecbd,ecbdf,fcbde,cbdef,fedbc,edbcf,fdbce,dbcef,febcd,ebcdf,fbcde,bcdef,fedcba,edcbaf,fdcbae,dcbaef,fecbad,ecbadf,fcbade,cbadef,fedbac,edbacf,fdbace,dbacef,febacd,ebacdf,fbacde,bacdef,fedcab,edcabf,fdcabe,dcabef,fecabd,ecabdf,fcabde,cabdef,fedabc,edabcf,fdabce,dabcef,feabcd,eabcdf,fabcde,abcdef,g,ga,ag,gb,bg,gba,bag,gab,abg,gc,cg,gca,cag,gac,acg,gcb,cbg,gbc,bcg,gcba,cbag,gbac,bacg,gcab,cabg,gabc,abcg,gd,dg,gda,dag,gad,adg,gdb,dbg,gbd,bdg,gdba,dbag,gbad,badg,gdab,dabg,gabd,abdg,gdc,dcg,gcd,cdg,gdca,dcag,gcad,cadg,gdac,dacg,gacd,acdg,gdcb,dcbg,gcbd,cbdg,gdbc,dbcg,gbcd,bcdg,gdcba,dcbag,gcbad,cbadg,gdbac,dbacg,gbacd,bacdg,gdcab,dcabg,gcabd,cabdg,gdabc,dabcg,gabcd,abcdg,ge,eg,gea,eag,gae,aeg,geb,ebg,gbe,beg,geba,ebag,gbae,baeg,geab,eabg,gabe,abeg,gec,ecg,gce,ceg,geca,ecag,gcae,caeg,geac,eacg,gace,aceg,gecb,ecbg,gcbe,cbeg,gebc,ebcg,gbce,bceg,gecba,ecbag,gcbae,cbaeg,gebac,ebacg,gbace,baceg,gecab,ecabg,gcabe,cabeg,geabc,eabcg,gabce,abceg,ged,edg,gde,deg,geda,edag,gdae,daeg,gead,eadg,gade,adeg,gedb,edbg,gdbe,dbeg,gebd,ebdg,gbde,bdeg,gedba,edbag,gdbae,dbaeg,gebad,ebadg,gbade,badeg,gedab,edabg,gdabe,dabeg,geabd,eabdg,gabde,abdeg,gedc,edcg,gdce,dceg,gecd,ecdg,gcde,cdeg,gedca,edcag,gdcae,dcaeg,gecad,ecadg,gcade,cadeg,gedac,edacg,gdace,daceg,geacd,eacdg,gacde,acdeg,gedcb,edcbg,gdcbe,dcbeg,gecbd,ecbdg,gcbde,cbdeg,gedbc,edbcg,gdbce,dbceg,gebcd,ebcdg,gbcde,bcdeg,gedcba,edcbag,gdcbae,dcbaeg,gecbad,ecbadg,gcbade,cbadeg,gedbac,edbacg,gdbace,dbaceg,gebacd,ebacdg,gbacde,bacdeg,gedcab,edcabg,gdcabe,dcabeg,gecabd,ecabdg,gcabde,cabdeg,gedabc,edabcg,gdabce,dabceg,geabcd,eabcdg,gabcde,abcdeg,gf,fg,gfa,fag,gaf,afg,gfb,fbg,gbf,bfg,gfba,fbag,gbaf,bafg,gfab,fabg,gabf,abfg,gfc,fcg,gcf,cfg,gfca,fcag,gcaf,cafg,gfac,facg,gacf,acfg,gfcb,fcbg,gcbf,cbfg,gfbc,fbcg,gbcf,bcfg,gfcba,fcbag,gcbaf,cbafg,gfbac,fbacg,gbacf,bacfg,gfcab,fcabg,gcabf,cabfg,gfabc,fabcg,gabcf,abcfg,gfd,fdg,gdf,dfg,gfda,fdag,gdaf,dafg,gfad,fadg,gadf,adfg,gfdb,fdbg,gdbf,dbfg,gfbd,fbdg,gbdf,bdfg,gfdba,fdbag,gdbaf,dbafg,gfbad,fbadg,gbadf,badfg,gfdab,fdabg,gdabf,dabfg,gfabd,fabdg,gabdf,abdfg,gfdc,fdcg,gdcf,dcfg,gfcd,fcdg,gcdf,cdfg,gfdca,fdcag,gdcaf,dcafg,gfcad,fcadg,gcadf,cadfg,gfdac,fdacg,gdacf,dacfg,gfacd,facdg,gacdf,acdfg,gfdcb,fdcbg,gdcbf,dcbfg,gfcbd,fcbdg,gcbdf,cbdfg,gfdbc,fdbcg,gdbcf,dbcfg,gfbcd,fbcdg,gbcdf,bcdfg,gfdcba,fdcbag,gdcbaf,dcbafg,gfcbad,fcbadg,gcbadf,cbadfg,gfdbac,fdbacg,gdbacf,dbacfg,gfbacd,fbacdg,gbacdf,bacdfg,gfdcab,fdcabg,gdcabf,dcabfg,gfcabd,fcabdg,gcabdf,cabdfg,gfdabc,fdabcg,gdabcf,dabcfg,gfabcd,fabcdg,gabcdf,abcdfg,gfe,feg,gef,efg,gfea,feag,geaf,eafg,gfae,faeg,gaef,aefg,gfeb,febg,gebf,ebfg,gfbe,fbeg,gbef,befg,gfeba,febag,gebaf,ebafg,gfbae,fbaeg,gbaef,baefg,gfeab,feabg,geabf,eabfg,gfabe,fabeg,gabef,abefg,gfec,fecg,gecf,ecfg,gfce,fceg,gcef,cefg,gfeca,fecag,gecaf,ecafg,gfcae,fcaeg,gcaef,caefg,gfeac,feacg,geacf,eacfg,gface,faceg,gacef,acefg,gfecb,fecbg,gecbf,ecbfg,gfcbe,fcbeg,gcbef,cbefg,gfebc,febcg,gebcf,ebcfg,gfbce,fbceg,gbcef,bcefg,gfecba,fecbag,gecbaf,ecbafg,gfcbae,fcbaeg,gcbaef,cbaefg,gfebac,febacg,gebacf,ebacfg,gfbace,fbaceg,gbacef,bacefg,gfecab,fecabg,gecabf,ecabfg,gfcabe,fcabeg,gcabef,cabefg,gfeabc,feabcg,geabcf,eabcfg,gfabce,fabceg,gabcef,abcefg,gfed,fedg,gedf,edfg,gfde,fdeg,gdef,defg,gfeda,fedag,gedaf,edafg,gfdae,fdaeg,gdaef,daefg,gfead,feadg,geadf,eadfg,gfade,fadeg,gadef,adefg,gfedb,fedbg,gedbf,edbfg,gfdbe,fdbeg,gdbef,dbefg,gfebd,febdg,gebdf,ebdfg,gfbde,fbdeg,gbdef,bdefg,gfedba,fedbag,gedbaf,edbafg,gfdbae,fdbaeg,gdbaef,dbaefg,gfebad,febadg,gebadf,ebadfg,gfbade,fbadeg,gbadef,badefg,gfedab,fedabg,gedabf,edabfg,gfdabe,fdabeg,gdabef,dabefg,gfeabd,feabdg,geabdf,eabdfg,gfabde,fabdeg,gabdef,abdefg,gfedc,fedcg,gedcf,edcfg,gfdce,fdceg,gdcef,dcefg,gfecd,fecdg,gecdf,ecdfg,gfcde,fcdeg,gcdef,cdefg,gfedca,fedcag,gedcaf,edcafg,gfdcae,fdcaeg,gdcaef,dcaefg,gfecad,fecadg,gecadf,ecadfg,gfcade,fcadeg,gcadef,cadefg,gfedac,fedacg,gedacf,edacfg,gfdace,fdaceg,gdacef,dacefg,gfeacd,feacdg,geacdf,eacdfg,gfacde,facdeg,gacdef,acdefg,gfedcb,fedcbg,gedcbf,edcbfg,gfdcbe,fdcbeg,gdcbef,dcbefg,gfecbd,fecbdg,gecbdf,ecbdfg,gfcbde,fcbdeg,gcbdef,cbdefg,gfedbc,fedbcg,gedbcf,edbcfg,gfdbce,fdbceg,gdbcef,dbcefg,gfebcd,febcdg,gebcdf,ebcdfg,gfbcde,fbcdeg,gbcdef,bcdefg,gfedcba,fedcbag,gedcbaf,edcbafg,gfdcbae,fdcbaeg,gdcbaef,dcbaefg,gfecbad,fecbadg,gecbadf,ecbadfg,gfcbade,fcbadeg,gcbadef,cbadefg,gfedbac,fedbacg,gedbacf,edbacfg,gfdbace,fdbaceg,gdbacef,dbacefg,gfebacd,febacdg,gebacdf,ebacdfg,gfbacde,fbacdeg,gbacdef,bacdefg,gfedcab,fedcabg,gedcabf,edcabfg,gfdcabe,fdcabeg,gdcabef,dcabefg,gfecabd,fecabdg,gecabdf,ecabdfg,gfcabde,fcabdeg,gcabdef,cabdefg,gfedabc,fedabcg,gedabcf,edabcfg,gfdabce,fdabceg,gdabcef,dabcefg,gfeabcd,feabcdg,geabcdf,eabcdfg,gfabcde,fabcdeg,gabcdef,abcdefg


目录
相关文章
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
10月前
|
算法
面试场景题:如何设计一个抢红包随机算法
本文详细解析了抢红包随机算法的设计与实现,涵盖三种解法:随机分配法、二倍均值法和线段切割法。随机分配法通过逐次随机分配金额确保总额不变,但易导致两极分化;二倍均值法优化了金额分布,使每次抢到的金额更均衡;线段切割法则将总金额视为线段,通过随机切割点生成子金额,手气最佳金额可能更高。代码示例清晰,结果对比直观,为面试中类似算法题提供了全面思路。
1584 16
|
12月前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
474 16
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
165 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
2162 2
|
机器学习/深度学习 JavaScript 算法
面试中的网红虚拟DOM,你知多少呢?深入解读diff算法
该文章深入探讨了虚拟DOM的概念及其diff算法,解释了虚拟DOM如何最小化实际DOM的更新,以此提升web应用的性能,并详细分析了diff算法的实现机制。
|
消息中间件 存储 算法
这些年背过的面试题——实战算法篇
本文是技术人面试系列实战算法篇,面试中关于实战算法都需要了解哪些内容?一文带你详细了解,欢迎收藏!