编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
2014-05-22 15:57
886 查看
"a" "b""c"
"ab" "bc""ca" "ba" "cb" "ac"
"abc" "acb""bac" "bca" "cab" "cba"
import java.util.Scanner;
import java.util.TreeSet;
public
class Test6 {
public
static void main(String[] args) {
Scanner s =
new Scanner(System.in);//从键盘输入
String str = s.next();
// System.out.println(str);
s.close();
show(str);
}
/**
*
打印各种可能
*
@param str
str是给定的字符串
*/
private
static void show(String str) {
TreeSet<String> set =
saveInSet(newStringBuilder(str),0,new StringBuilder(),new TreeSet<String>());
for (String s : set) {
System.out.println(s);
}
}
/**
*
返回集合,集合包含字符串所有字符的可能组合
*
@param str
给定字符串转换成的StringBuilder对象,主要是为了操作字符方便
*
@param count
计数,对第count进行排列组合
*
@param buff
暂存放某种可能
*
@param set
集合,去除重复元素,例如"aab"以第一个a开头会有aba,以第二个a开头也会有aba
*
@return
返回TreeSet集合
*/
private
static TreeSet<String>saveInSet(StringBuilder str,
int count, StringBuilder buff, TreeSet<String> set) {
for (int i = 0,len = str.length(); i < len; i++) {
//获取字符
char c = str.charAt(i);
//去掉原字符串的某个字符(保证某个字符不被重复利用)
str.deleteCharAt(i);
//缓存添加该字符
buff.append(c);
//将该种可能组合存入集合
set.add(buff.toString());
//str仍包含字符,则递归调用,开始取第二位字符
//若还有第三位则继续递归……以此类推
if (str.length() !=0) {
//count用于记录目前在进行排列组合的第count位
count++;
//递归
saveInSet(str,count,buff,set);
//第n位递归结束后,需要继续对n-1位排列,位数-1
count--;
}
//递归结束后,需要继续对n-1位排列,因此清除第n位的记录
buff.deleteCharAt(count);
//删除的字符插回str
str.insert(i, c);
}
//返回集合
return set;
}
}
"ab" "bc""ca" "ba" "cb" "ac"
"abc" "acb""bac" "bca" "cab" "cba"
import java.util.Scanner;
import java.util.TreeSet;
public
class Test6 {
public
static void main(String[] args) {
Scanner s =
new Scanner(System.in);//从键盘输入
String str = s.next();
// System.out.println(str);
s.close();
show(str);
}
/**
*
打印各种可能
*
@param str
str是给定的字符串
*/
private
static void show(String str) {
TreeSet<String> set =
saveInSet(newStringBuilder(str),0,new StringBuilder(),new TreeSet<String>());
for (String s : set) {
System.out.println(s);
}
}
/**
*
返回集合,集合包含字符串所有字符的可能组合
*
@param str
给定字符串转换成的StringBuilder对象,主要是为了操作字符方便
*
@param count
计数,对第count进行排列组合
*
@param buff
暂存放某种可能
*
@param set
集合,去除重复元素,例如"aab"以第一个a开头会有aba,以第二个a开头也会有aba
*
@return
返回TreeSet集合
*/
private
static TreeSet<String>saveInSet(StringBuilder str,
int count, StringBuilder buff, TreeSet<String> set) {
for (int i = 0,len = str.length(); i < len; i++) {
//获取字符
char c = str.charAt(i);
//去掉原字符串的某个字符(保证某个字符不被重复利用)
str.deleteCharAt(i);
//缓存添加该字符
buff.append(c);
//将该种可能组合存入集合
set.add(buff.toString());
//str仍包含字符,则递归调用,开始取第二位字符
//若还有第三位则继续递归……以此类推
if (str.length() !=0) {
//count用于记录目前在进行排列组合的第count位
count++;
//递归
saveInSet(str,count,buff,set);
//第n位递归结束后,需要继续对n-1位排列,位数-1
count--;
}
//递归结束后,需要继续对n-1位排列,因此清除第n位的记录
buff.deleteCharAt(count);
//删除的字符插回str
str.insert(i, c);
}
//返回集合
return set;
}
}
相关文章推荐
- java练习: 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
- JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符。
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- 输入一个字符串,要求输出字符串中字符所有的排列,例如输入"abc",得到"abc","acb","bca","bac","cab","cba"
- 给一个字符串(包含重复字符),打印它的所有可能的组合。
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 第四题:如果一个字符数组中有重复的字符 如"abbcd" 那么如何编程打印其全排列
- 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
- 打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
- 编程实现:从字符中获取连续数组序列,如字符串"a1dl2iad9j3la5kudp7u9pn4blj8ap5u3e6ml9a"中可以得到的连续数字序列为1234556.【注】:只考虑一位,因此最长的数
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
- 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
- 算法1(输出字符串的所有组合形式,例如 string s="abc" 输出所有形式 a,b,c,ab,bc,abc 可以与顺序无关)
- 一个 ArrayList 对象 aList 中存有若干个字符串元素,现欲遍历该 ArrayList 对象,删除其中 所有值为"abc"的字符串元素,请用代码实现。
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素,请用代码实现。
- 从一个字符串中返回第一个没有重复出现的字符(例如"Hello World",返回"H")
- 题目描述:给定一个字符串,求出其所有可能的字符组合. 比如:abc 其所有组合是:a,b,c,ab,ac,bc,abc