1.可重复排列:abc三个字符组成的所有长度为3的字符串,aaa,aab,aac......ccc 一共27种

利用递归的思想,第一个字符可以从abc中选择一个,三种选择,之后问题转化为abc组成长度为2的字符的情况,循环递归后可以求出所有的可能。控制好循环退出条件即可。

利用递归可以处理,不知道字符长度的情况下,即通用处理。如果知道长度,只需要利用多层循环,也可以得出结论。

public class Permutation {

public static void main(String[] args) {

char[] chs = {'a','b','c'};

per(new char[3], chs, 3-1);

}

public static void per(char[] buf, char[] chs, int len){

if(len == -1){

for(int i=buf.length-1; i>=0; --i)

System.out.print(buf[i]);

System.out.println();

return;

}

for(int i=0; i

buf[len] = chs[i];

per(buf, chs, len-1);

}

}

}

可重复选择,一共27种情况,结果如下图所示

2.全排列:还是abc三个字符,全排列即字符不能重复。最后 3*2 =6种结果

可以利用1中的方法,只要判断3个字符是否相等,都不相等的才是需要的全排列里的一个。这样的时间复杂度为n^n,而全排列的种类为n!所以需要设计一种n!的算法。

也可以利用递归,第一个字符串一共有n种选择,剩下的变成一个n-1规模的递归问题。而第一个字符的n种选择,都是字符串里面的。因此可以使用第一个字符与1-n的位置上进行交换,得到n中情况,然后递归处理n-1的规模,只是处理完之后需要在换回来,变成原来字符的样子。

public class Arrange {

public static void main(String[] args) {

char[] chs = {'a','b','c'};

arrange(chs, 0, chs.length);

}

public static void arrange(char[] chs, int start, int len){

if(start == len-1){

for(int i=0; i

System.out.print(chs[i]);

System.out.println();

return;

}

for(int i=start; i

char temp = chs[start];

chs[start] = chs[i];

chs[i] = temp;

arrange(chs, start+1, len);

temp = chs[start];

chs[start] = chs[i];

chs[i] = temp;

}

}

}

运行结果如下图所示,一共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 = {'a','b','c'};

comb(chs);

}

public static void comb(char[] chs) {

int len = chs.length;

int nbits = 1 << len;

for (int i = 0; i < nbits; ++i) {

int t;

for (int j = 0; j < len; j++) {

t = 1 << j;

if ((t & i) != 0) { // 与运算,同为1时才会是1

System.out.print(chs[j]);

}

}

System.out.println();

}

}

}

输出结果如下,第一行为空,表示一个都不取

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java字符串组合_Java实现abc字符串排列组合相关推荐

  1. 排列组合思维导图_排列组合——排列数专题

    在上篇关于排列组合主要考点的介绍中,正男老师提到:排列组合考点通常可以拆分为排列数考点和组合数考点.排列数考点相关试题可以细分为2类,分别为:穷举问题和限制条件问题.本期正男老师就从近六年内的5道涉及 ...

  2. python实现不重复排列组合_Python使用combinations实现排列组合的方法

    好久没有写博客了!昨天小牛在上海举办了牛友见面会,现场优惠还是比较大,心仪已久加上一时脑热就入手了.以为会有多么开心,其实目前最大的感受就是焦虑!担心电动车被偷,担心电池被偷,担心路上突然被交警叔叔拦 ...

  3. 子字符串组合 java_abc三字符实现排列组合-JAVA版

    1.概述 在高中的时候经常会遇到一些排列组合的问题,那个时候基本上都是基于公式计算的.其实理论上是可以枚举出来的,而计算机最擅长的事情就是枚举,本文主要讨论a,b,c三个字符的各种排列组合问题,当字符 ...

  4. java 字符串操作_Java 字符与字符串

    字符 // 定义字符 char c1 = 'a'; char c2 = '1'; char c3 = '中'; // 自动装箱 Character c = c1; // 自动拆箱 c1 = c; // ...

  5. java定义字符串常量_Java中的字符串常量池

    ava中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...

  6. java字符连接字符串数组_Java中连接字符串的最佳方法

    java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...

  7. java字符串转字符串列表_Java中的字符串列表示例

    java字符串转字符串列表 We have to read total number string i.e. "n", create a list of the Strings a ...

  8. java 编译开关_Java开关盒字符串

    java 编译开关 Today we will look into Java Switch Case String Example. Being a java programmer, I know t ...

  9. java判断字符串长度_java判断中文字符串长度的简单实例

    /** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * @param value 指定的字符串 * @return 字符串的长度 */ public static int length( ...

最新文章

  1. 20080509 - System.ExecutionEngineException 在 DefaultDomain 中发生
  2. Linux 永久修改主机名hostname
  3. 【算法设计与分析】03 算法及其时间复杂度
  4. oracle手工收集awr报告_oracle手工生成AWR报告方法记录-阿里云开发者社区
  5. python装饰器两层和三层_我终于弄懂了Python的装饰器(三)
  6. 初探单点登录 SSO
  7. 多线程有几种实现方法_Java多线程实现有哪几种方法?
  8. 微信小程序源码:淘宝客外卖返利优惠券、头像 壁纸 朋友圈文案查询、古诗词技术文章查询
  9. opencv摄像头异常处理
  10. 戴尔服务器虚拟光驱,SupportAssist
  11. 2022网络安全技术自学路线图及职业选择方向
  12. 一个字段,就可以判断是否关注公众号,你信吗
  13. 电路matlab搭建,MATLAB电路仿真搭建教程
  14. java判定成绩等级_Java编程判断一组学生成绩等级
  15. 怎么查验佳能EOS单反相机是否正品
  16. 盘点2016最值得突击的七大海外市场:最后一年窗口期,不出海就出局!
  17. 社会内卷的真正原因:华为内部论坛的这篇雄文火了
  18. 印力集团进驻山西的首个项目太原印象城开业
  19. am335x+wm8960音频基于linux 4.9.41移植
  20. MusicLab RealEight for Mac破解教程

热门文章

  1. thinkpad e450c蓝牙重新安装后不能搜索到手机解决方案--适用大部分笔记本
  2. 条码打印软件里如何批量编制69商品条码?
  3. Typing for mac(打字训练工具)
  4. C++ Reference: Standard C++ Library reference: C Library: cmath: erf
  5. 用生产者消费者模式爬取斗图吧,一次性收获超多表情包【python爬虫入门进阶】(11)
  6. Java数据采集:Xpath解析 + WebMagic案例:采集豆瓣豆列电影信息存储MySql数据库
  7. ng-alain php,基于阿里出得ng-Alain搭建后台管理系统
  8. 云和恩墨 -全球化数据资产端到端解决方案服务商
  9. 手机里拍摄的照片误删了也不怕,2招教你快速找回照片!
  10. 画画怎么配色好看?怎样才能画好色彩搭配?