1.字符数组元素的组合

字符数组元素的组合通常是要求输入一个字符串,然后输出得到字符串中字符的所有组合。例如输入字符串“abc”,输出为“a”,“b”,“c”,“ab”,“ac”,“bc”,“abc”这七种组合方式。求解思路:假设要在长度为len的字符串中求num个字符的组合,可以先从头扫描字符串的第一个字符,对于第一个字符可以有两种处理方式:一是把这个字符放到组合中去,接下来还需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来需要在剩下的n-1个字符中选择m个字符。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*该程序先根据输入的两个字符串找出其中相同的字符,然后根据指定的组合长度求出各种可能的组合
*
*/
public class CharArrayCombine {public static void main(String[] args) {String user="AdHRgwxy";String mothers="aDRmgqh";password(user,mothers,3);}public static void password(String userName,String motherName,int pwdlen) {char[] me=userName.toLowerCase().toCharArray();char[] mother=motherName.toLowerCase().toCharArray();char[] array=new char[me.length];int index=0;for(int i=0;i<me.length;i++) {if(find(mother,me[i])==true&&find(array,me[i])==false) {array[index]=me[i];index++;}}for(int i=0;i<index-1;i++) {for(int j=0;j<index-1-i;j++){if(array[j]>array[j+1]) {char temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}List<Character> list=new ArrayList<Character>();combine(array,0,index-1,pwdlen,list);}/*字符数组的组合* */public static void combine(char[] array,int start,int end,int number,List<Character> list) {if(number==0) {String out="";for(Character c:list) {out=out+c.toString();}System.out.print(out+" ");return;}if(start>end) {return;}list.add(array[start]);combine(array,start+1,end,number-1,list);list.remove((Character)array[start]);combine(array,start+1,end,number,list);}/*查找字符数组中是否有指定的字符* 有则返回true,否则返回false*/public static boolean find(char[] array,char c) {boolean flag=false;  //默认字符数组没有待查找的字符for(int i=0;i<array.length;i++) {if(array[i]==c) {flag=true;break;}}return flag;}
}

输出结果:adg adh adr agh agr ahr dgh dgr dhr ghr

import java.util.ArrayList;
import java.util.List;public class CharCombine{public static void main(String args[]){  char[] array={'a','b','c'};  combiantion(array);  }  public static void combiantion(char[] array){  if(array==null||array.length==0){  return ;  }  List<Character> list=new ArrayList();  for(int i=1;i<=array.length;i++){  combine(array,0,i,list);  } }  //从字符数组中第begin个字符开始挑选number个字符加入list中  public static void combine(char[] array,int begin,int number,List<Character> list){  if(number==0){String out="";for(Character c:list) {out=out+c.toString();}System.out.print(out+" ");return; }  if(begin==array.length){  return;  }  list.add(array[begin]);  combine(array,begin+1,number-1,list);  list.remove((Character)array[begin]);  combine(array,begin+1,number,list);  }
}

输出结果:a b c ab ac bc abc


2.字符数组元素的排列

字符数组元素的排列通常是要求输入一个字符串,然后输出字符串中字符的所有排列。例如输入字符串“abc”,输出的排列组合为“abc”、“acb”、“bac”、“bca”、“cab”、“cba”这六种排列。求解思路:固定第一个字符a,求后面两个字符bc的排列。当b和c两个字符的排列求完后,我们把第一个字符a和后面的b交换,得到bac;接着我们固定第一个字符b,求后面两个字符ac的排列。依次这样进行下去,需要注意的是,前面已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来。在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。


public class CharArrangement{public static void main(String[] args) {String str="abc";char[] array=str.toCharArray();arrangement(array, 0);     // TODO Auto-generated method stub}public static void arrangement(char[] array,int i) {if(array==null||i<0||i>array.length){return;}else if(i==array.length) {String out="";for(int j=0;j<array.length;j++) {out=out+array[j];}System.out.print(out+" ");}else {char temp;for(int j=i;j<array.length;j++){temp=array[j];array[j]=array[i];array[i]=temp;arrangement(array, i+1);temp=array[j];array[j]=array[i];array[i]=temp;}}}
}

输出结果:abc acb bac bca cba cab

本文参考了:https://www.cnblogs.com/565261641-fzh/p/5398454.html

Java之字符串数组元素的排列与组合(递归实现)相关推荐

  1. java 中文 音序,java 中文字符串数组按照音序排列

    java 中文字符串数组按照音序排列 复制代码 代码如下: public class SortComparator implements Comparator{ public int compare( ...

  2. java复制数组到数组,Java如何将一个数组元素复制到另一个数组

    Java如何将一个数组元素复制到另一个数组 1 说明 在此程序中,我们需要将一个数组的所有元素复制到另一个数组中.这可以通过循环遍历第一数组并将第一数组的元素存储到第二数组的相应位置来完成. 2 算法 ...

  3. java怎么把把数组元素倒置_java数组元素倒置

    package dataStructure; import java.util.Arrays; import java.util.ArrayList; public class Test1 { sta ...

  4. java数组元素旋转,Java实现右旋转数组元素

    Java实现右旋转数组元素 1 说明 在此程序中,我们需要将数组的元素向右旋转指定的次数.如果将数组的所有元素向右移动一个位置,则称该数组为右旋转.一种方法是通过将数组的每个元素移至其下一个位置来遍历 ...

  5. python中如何求列表中的和_python实现求解列表中元素的排列和组合

    求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了,今天花点时间写一下,之前都是手工写的,后来知道可以直接使用python ...

  6. java的字符串数组添加元素_java 数组中插入新的元素

    class Demo1 { public static void main(String[] args) { /* 5. 有如下歌曲数组 String[] musics = new String[]{ ...

  7. java 将字符串数组清空_在Java中如何将字符串集转换为字符串数组

    详细内容 在Java中将字符串集(Set)转换为字符串数组(String[])的方法有:使用for循环,使用Set.toArray()方法,使用Arrays.copyOf()方法等等.下面我们就来具体 ...

  8. java初始化字符串数组_在java中如何定义一个字符串数组

    展开全部 1. java中定义一个字符串数组方式如32313133353236313431303231363533e59b9ee7ad9431333366306465下,string类型和其他基本类型 ...

  9. Java int数据类型数组降序排列的方法

    Java int数组类型数组降序排列的方法 前言:使用Java对int数据类型数组降序排列没有C++那样方便但是也是可以简单实现的. 1.方法一: public class Main {public ...

  10. java中输出数组元素的方法

    定义一个数组: int [] array = new int {5, 2, 3, 8}; 方法一: for (int i = 0;i < array.length){System.out.pri ...

最新文章

  1. 工作中InnoDB引擎数据库主从复制同步心得
  2. [云炬创业学笔记]第一章创业是什么测试8
  3. C#正则表达式MatchCollection类浅析
  4. 好插件·用户造【CSND超好用插件】·【机械键盘大放送】
  5. js方式调用php_javascript调用PHP和PHP调用javascript的方法
  6. designer一直未响应 qt_未雨绸缪及时清淤 曾是内涝重灾区 这次涵洞未积水
  7. hadoop 2.7.2 + zookeeper 高可用集群部署
  8. sql server 架构_在SQL Server中引入架构文档
  9. 程序员,你会说话吗?
  10. 【动态规划】区间dp: P3205 合唱队
  11. 再也不用为word 中表达式的上标和下标发愁了
  12. 小米连续点击Android,屏幕自动点击
  13. Excel表格拆分,教你三个绝招。
  14. SSM酒店预订客房管理系统(包含数据库及项目说明)
  15. 基于SVM支持向量机的车牌分割识别算法matlab仿真
  16. Ubuntu 安装 netbeans 及遇到 not all requested modules can be enabled 问题、配置C/C++环境问题
  17. 基于localstorage实现增删改查功能
  18. 用ffmpeg将视频转成gif动图
  19. 【网络安全】LDAP协议
  20. 平时收集的一些有关UED的团队和个人博客(转)

热门文章

  1. linux date 4 2,JZ2440 linux-3.4.2内核启动报错:Verifying Checksum ... Bad Data CRC(示例代码)...
  2. 2006中秋节短信,最新中秋节祝福短信
  3. jmeter控制台取样间隔设置
  4. 关于我的论文以及毕业设计的一些总结吧——基于物联网技术的智能实验室管理系统设计与实现
  5. burst什么意思_burst是什么意思_burst在线翻译_英语_读音_用法_例句_海词词典
  6. SwiftUI 设置圆角、边框
  7. 2021新年喜庆音乐中国风背景音乐素材共39首第二辑合集下载
  8. 随机过程(基本概念、平稳随机过程)
  9. 题目:离骚-原文和译文少了一行,你能写程序识别并找出来吗
  10. spark sql 字符串转时间戳