- import java.io.*;
- public class Text6 {
-
- public static void main(String[] args) {
-
- //调用自定义方法获取字符串的所以组合形式
- allArray();
- }
- public static void allArray(){
-
- //开启键盘录入
- BufferedReader bufr=new BufferedReader(
- new InputStreamReader(System.in));
- String line=null;
- //读取键盘录入的内容,并处理异常
- try
- {
- line=bufr.readLine();
- }
- catch(IOException ie)
- {
- throw new RuntimeException("读取失败");
- }
- //将读取的字符串转换成字符数组
- char[] cha=line.toCharArray();
- //定义一个字符串缓冲区,一遍对遍历组合的字符串进行存储
- StringBuffer sb=new StringBuffer();
- //将字符串添加到字符串缓冲区,以完成setCharAt操作
- sb.append(line);
- //定义一个指针,完成字符串缓冲区内字符的修改
- int count=0;
- //记录字符串长度
- int strLen=cha.length;
- //调用自定义方法获取字符串组合形式
- getSome(cha,strLen,sb,count);
-
- }
- public static void getSome(char[] cha,int strLen,
- StringBuffer sb,int count){
-
- //采用递归的方式,在遍历数组的同时完成不同字符数的不同组合,
- for(int x=0;x<cha.length;x++)
- {
- //更改指定Index的字符以完成相同字符数的不同组合
- sb.setCharAt(count,cha[x]);
- //字符串长度大于1时递归获取下一角标的字符
- if(strLen>1)
- {
- //保证count在递推的循环完成后与之前相同
- count++;
- getSome(cha,strLen-1,sb,count);
- count--;
-
- }
- //按照填入的字符数获取组合的字符串
- String s=sb.substring(0,count+1);
- //定义布尔型变量,用于判断字符数组中是否有相同元素
- boolean flog=true;
- //将字符串转换成字符数组
- char[] ss=s.toCharArray();
- //通过for嵌套判断该字符数组内是否有相同元素,并用flog记录
- for(int z=0;z<ss.length;z++){
-
- for(int m=z+1;m<ss.length;m++){
-
- if(ss[z]==ss[m])
- flog=false;
- }
- }
- //如果没有,将字符数组转换成字符串并打印。
- if(flog)
- System.out.println(new String(ss,0,ss.length));
- }
- }
- }
复制代码 我也有这道题,当时也把我难住了,研究好久才弄懂,特来分享下 |