这篇文章将为大家详细讲解有关Java怎么实现abc字符串排列组合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1。可重复排列:abc三个字符组成的所有长度为3的字符串,aaa,艺术展,aac……ccc一共27种
利用递归的思想,第一个字符可以从abc中选择一个,三种选择,之后问题转化为abc组成长度为2的字符的情况,循环递归后可以求出所有的可能。控制好循环退出条件即可。
利用递归可以处理,不知道字符长度的情况下,即通用处理。如果知道长度,只需要利用多层循环,也可以得出结论。
public class Permutation {, ,public static  void main (String [], args), {, char[],才能chs =,{& # 39;一个# 39;& # 39;b # 39;, & # 39; c # 39;},, 每才能(new char [3], chs,, 3 - 1),, }大敌; ,public static  void 每(char[],但,,char [], chs,, int len) {, 如果才能(==len 1) {, ,,(int 我=buf.length-1;, i>=0;,——我), ,,,System.out.print (buf[我]),, ,,System.out.println (),, ,,,返回; ,,}, 的才能(int i=0, i可重复选择,一共27种情况,结果如下图所示
2。全排列:还是abc三个字符,全排列即字符不能重复。最后3 * 2=6种结果
可以利用1中的方法,只要判断3个字符是否相等,都不相等的才是需要的全排列里的一个。这样的时间复杂度为n ^ n,而全排列的种类为n !所以需要设计一种n !的算法。
也可以利用递归,第一个字符串一共有n种选择,剩下的变成一个n - 1规模的递归问题。而第一个字符的n种选择,都是字符串里面的,因此可以使用第一个字符与其它的位置上进行交换,得到n中情况,然后递归处理n - 1的规模,只是处理完之后需要在换回来,变成原来字符的样子。
public class Arrange {, ,public static  void main (String [], args), {, char[],才能chs =,{& # 39;一个# 39;& # 39;b # 39;, & # 39; c # 39;},, 安排才能(chs, 0,, chs.length),, }大敌; ,public static  void 安排(char [], chs,, int 开始,int len) {, 如果才能(start ==, len-1) {, ,,(int i=0;, i运行结果如下图所示,一共6种组合
3。组合:abc三个字符的所有组合
求所有组合也就是abc各个位是否选取的问题,第一位2中可能,第二位2种…所以一共有2 ^ n种。用0表示不取,1表示选取,这样可以用110这样的形式表示ab.abc一共的表示形式从0到2 ^ 3 - 1,然后按位与运算,如果结果为1就输出当前位,结果0不输出。
public class Comb {, ,public static  void main (String [], args), {, char[],才能chs =,{& # 39;一个# 39;& # 39;b # 39;, & # 39; c # 39;},, 梳子(chs);才能, }大敌; , ,public static  void 梳(char [], chs), {, int 才能;len =, chs.length;, int 才能;nbits =, 1, & lt; & lt;, len;, for 才能;(int 小姐:=,0;,小姐:& lt;, nbits;, + + i), {, ,,int t, ,,for (int j =, 0;, j & lt;, len;, j + +), {, ,,,t =, 1, & lt; & lt;, j。, ,,,if ((, t i), !=, 0),{,//与运算,同为1时才会是1, ,,,,System.out.print (chs [j]),, ,,,}, ,,}, ,,System.out.println (),, ,,}, }大敌; }输出结果如下,第一行为空,表示一个都不取
关于“Java怎么实现abc字符串排列组合”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。
Java怎么实现abc字符串排列组合