编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符。
2014-06-12 23:07
344 查看
编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"
* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"
package test; public class ZuHe2 { // main方法 控制程序 public static void main(String[] args) { String s = "abc";//位数可以随便写,如 a abc abcd abcde。没有添加健壮性判断,如判空、重复等 char[] ch = s.toCharArray(); for (int i = 0; i < ch.length; i++) { String[] s1 = diguizuhe(i, ch);// 调用递归,来完成字母的组合 print(s1);// 打印组合情况 } } // 递归函数,完成字母的组合 private static String[] diguizuhe(int i, char[] ch) { // 只用一个字母直接返回本身 if (i == 0) { String[] s = new String[ch.length]; for (int j = 0; j < ch.length; j++) { s[j] = ch[j] + ""; } return s; } // 大于一个字母,逐层递归 while (i > 0) { i--; String[] sum = new String[qiujiecheng(ch.length)];// 设置数组的大小 // 逐层拆解,递归组合 char[] ch2 = new char[ch.length - 1]; int m = 0; for (int j = 0, count = 0; j < ch.length; j++) { char ch3 = ch[j]; for (int k = 0, k1 = 0; k < ch.length; k++) { if (j != k) { ch2[k1] = ch[k]; k1++; } } String[] s = diguizuhe(i, ch2);// 用拆分后的新字符串去递归 for (int z = 0; z < s.length && (s[z] != null); z++, m++) { sum[count] = ch3 + s[z]; count++; } } // 将得到的字符串数组去空,返回 String[] s1 = new String[m]; for (int j = 0, x = 0; j < sum.length; j++, x++) { if (sum[j] != null) { s1[x] = sum[j]; } } return s1; } return null; } // 打印字符串数组 private static void print(String[] s) { for (int j = 0; j < s.length && s[j] != null; j++) { if (j != s.length - 1) { System.out.print("\"" + s[j] + "\"" + "\t"); } else { System.out.println("\"" + s[j] + "\""); } } } // 求阶乘,用于确定数组的大小 private static int qiujiecheng(int n) { int sum = 1; for (int i = 1; i <= n; i++) { sum *= i; } return sum; } }
相关文章推荐
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
- JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- java练习: 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
- 【列出一个字符串的全字符组合】
- 给一个字符串(包含重复字符),打印它的所有可能的组合。
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个stri
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 字符串的排列和组合(不考虑字符重复的情况)
- 基本字符串压缩 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 给定一个字符串,找到最长的子串的长度没有重复字符
- 输出一个字符串中没有重复的字符。如“baaca”输出“bac”
- 判断一个字符串中的字符没有重复
- 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)
- YY笔试题: 输出一个字符串中没有重复的字符。如“baaca”输出“bac”
- 求给定的某一个字符串中的最长的没有重复字符的子串的长度
- 从键盘输入一个由字母构成的字符串(不大于30个字符),要求从该串中取出3个不重复的字符,求所有不同的取法。如果字符串中没有取到3个不同的字符,则提示没有结果。对取出的字符要求按字母升序排列成串,对于不
- 给定一个字符串,返回字符串中没有重复字符的最长子串的长度
- 编程面试题在线训练平台:判断字符串是否没有重复字符
- 递归解决输出一个字符串的全排列问题(缺陷:没有考虑字符串中字符重复的问题)