java字符串组合_Java实现abc字符串排列组合
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字符串排列组合相关推荐
- 排列组合思维导图_排列组合——排列数专题
在上篇关于排列组合主要考点的介绍中,正男老师提到:排列组合考点通常可以拆分为排列数考点和组合数考点.排列数考点相关试题可以细分为2类,分别为:穷举问题和限制条件问题.本期正男老师就从近六年内的5道涉及 ...
- python实现不重复排列组合_Python使用combinations实现排列组合的方法
好久没有写博客了!昨天小牛在上海举办了牛友见面会,现场优惠还是比较大,心仪已久加上一时脑热就入手了.以为会有多么开心,其实目前最大的感受就是焦虑!担心电动车被偷,担心电池被偷,担心路上突然被交警叔叔拦 ...
- 子字符串组合 java_abc三字符实现排列组合-JAVA版
1.概述 在高中的时候经常会遇到一些排列组合的问题,那个时候基本上都是基于公式计算的.其实理论上是可以枚举出来的,而计算机最擅长的事情就是枚举,本文主要讨论a,b,c三个字符的各种排列组合问题,当字符 ...
- java 字符串操作_Java 字符与字符串
字符 // 定义字符 char c1 = 'a'; char c2 = '1'; char c3 = '中'; // 自动装箱 Character c = c1; // 自动拆箱 c1 = c; // ...
- java定义字符串常量_Java中的字符串常量池
ava中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...
- java字符连接字符串数组_Java中连接字符串的最佳方法
java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...
- java字符串转字符串列表_Java中的字符串列表示例
java字符串转字符串列表 We have to read total number string i.e. "n", create a list of the Strings a ...
- java 编译开关_Java开关盒字符串
java 编译开关 Today we will look into Java Switch Case String Example. Being a java programmer, I know t ...
- java判断字符串长度_java判断中文字符串长度的简单实例
/** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * @param value 指定的字符串 * @return 字符串的长度 */ public static int length( ...
最新文章
- 20080509 - System.ExecutionEngineException 在 DefaultDomain 中发生
- Linux 永久修改主机名hostname
- 【算法设计与分析】03 算法及其时间复杂度
- oracle手工收集awr报告_oracle手工生成AWR报告方法记录-阿里云开发者社区
- python装饰器两层和三层_我终于弄懂了Python的装饰器(三)
- 初探单点登录 SSO
- 多线程有几种实现方法_Java多线程实现有哪几种方法?
- 微信小程序源码:淘宝客外卖返利优惠券、头像 壁纸 朋友圈文案查询、古诗词技术文章查询
- opencv摄像头异常处理
- 戴尔服务器虚拟光驱,SupportAssist
- 2022网络安全技术自学路线图及职业选择方向
- 一个字段,就可以判断是否关注公众号,你信吗
- 电路matlab搭建,MATLAB电路仿真搭建教程
- java判定成绩等级_Java编程判断一组学生成绩等级
- 怎么查验佳能EOS单反相机是否正品
- 盘点2016最值得突击的七大海外市场:最后一年窗口期,不出海就出局!
- 社会内卷的真正原因:华为内部论坛的这篇雄文火了
- 印力集团进驻山西的首个项目太原印象城开业
- am335x+wm8960音频基于linux 4.9.41移植
- MusicLab RealEight for Mac破解教程
热门文章
- thinkpad e450c蓝牙重新安装后不能搜索到手机解决方案--适用大部分笔记本
- 条码打印软件里如何批量编制69商品条码?
- Typing for mac(打字训练工具)
- C++ Reference: Standard C++ Library reference: C Library: cmath: erf
- 用生产者消费者模式爬取斗图吧,一次性收获超多表情包【python爬虫入门进阶】(11)
- Java数据采集:Xpath解析 + WebMagic案例:采集豆瓣豆列电影信息存储MySql数据库
- ng-alain php,基于阿里出得ng-Alain搭建后台管理系统
- 云和恩墨 -全球化数据资产端到端解决方案服务商
- 手机里拍摄的照片误删了也不怕,2招教你快速找回照片!
- 画画怎么配色好看?怎样才能画好色彩搭配?