黑马程序员技术交流社区
标题:
前两天一同学问我的题 觉得值得与大家分享一下
[打印本页]
作者:
哇咔咔学IT
时间:
2016-4-24 12:07
标题:
前两天一同学问我的题 觉得值得与大家分享一下
//编程列出一个字符串的全部字符组合情况。原始字符串中没有重复字符。
//例如:
//原始字符串是“abc”,打印得到下列所有组合情况:
//“a” “b” “c”
//"ab" "ac" "ba" "bc" "ca" "cb"
//"abc" "acb" "bac" "bca" "cab" "cba"
package test;
import java.util.TreeSet;
public class Test19 {
/**
* @param args
*/
/* 思路:(个人思路,其实做法蛮多(主要指第三步),但我懒得去实验了,做出来就行啦 哇咔咔)
* 1.获取字符串中字符元素(通过char数组)
* 2.遍历字符串中单个字符(遍历char数组 就好啦)
* 3.通过for循环 遍历 两个字符的组合情况 到 字符串string.length()个字符的组合情况 (
* 如遍历count个字符的组合情况:
* (1)获取count个字符的组合情况 的 个数x
* (2)用char[] 中字符 组合出 x个 不重复的 count个字符的字符串 (通过random随机组合放入TreeSet中:运用TreeSet的特点 不重复 还能 有序输出 )
* )
*/
public static void main(String[] args) {
// 1.获取字符串中字符元素(通过char数组)
String s = "abc";
char[] ch = s.toCharArray();
// 2.遍历字符串中单个字符(遍历char数组 就好啦)
for (char c : ch) {
System.out.println(c);
}
// 3.通过for循环 遍历 两个字符的组合情况 到 字符串string.length()个字符的组合情况
for (int count = 2; count <= ch.length; count++) {
// 用char[] 中字符 组合出 x个 不重复的 count个字符的字符串
TreeSet<String> set = new TreeSet<>();
while(set.size() < getNum(count,ch.length)){
StringBuffer sb = new StringBuffer();
for (int i = 0; i < count;) {
String s1 = ((Character)(ch[(int) (Math.random() * ch.length)])).toString();
if(!sb.toString().contains(s1)) {
sb.append(s1);
i++;
}
}
set.add(sb.toString());
}
System.out.println(set);
}
}
// 获取count个字符的组合情况 的 个数x(例如:获取3个元素中 2个元素 有序排列组合的个数 x=3*2=6
// 获取4个元素中3个元素有序排列组合的个数 x=4*3*2=24)
private static int getNum(int count, int length) {
int x = 1;
for (int i = length - count + 1; i <= length; i++) {
x = x * i;
}
return x;
}
}
欢迎大家给出更好更简便的做法哦 (感觉我在这用random cpu的内心一定是崩溃的)
作者:
小红花
时间:
2016-4-24 12:26
学习下。。。。。
作者:
林明辉
时间:
2016-4-24 12:29
学习一下
作者:
昵称又被占用
时间:
2016-4-24 19:05
思路还不错啊
作者:
itheima2016
时间:
2016-4-24 19:59
学习!学习!
作者:
tongtian
时间:
2016-4-24 20:57
加油加油加油加油
作者:
菊花爆满山
时间:
2016-4-24 21:14
写的很好
作者:
哇咔咔学IT
时间:
2016-4-24 22:01
昵称又被占用 发表于 2016-4-24 19:05
思路还不错啊
多谢夸奖 (就当你是夸奖我啦 哈哈)
作者:
AllenTse
时间:
2016-4-25 10:21
进来看看,加油加油。
作者:
Erry
时间:
2016-4-25 21:45
太深奥,我没看懂
作者:
小海龙
时间:
2016-4-25 22:28
更简便的做法是采用递归算法,网上倒是有,就是看不太懂。
作者:
纪先森
时间:
2016-4-25 22:34
谢谢分享!!!
作者:
冰刃
时间:
2016-4-25 22:39
好题,学习了,回去练练
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2