算法题:100分,给出任意长度数字字符串,求所有不重复的组合

Rudeeeeeee 2007-07-20 07:47:33
比如输入字符串"1234", 输出所有的不重复的24个组合:1234,1243,1324,1342。。。。。。,
输入字符串"123", 输出所有的不重复的9个组合:123,132,213,。。。。。。

提示:
第一步:求出给定字符串的所有不重复组合数,比如"1234"的组合是24个,"123"是9个,"1233"是9个,
第二步:用到Hashtable和collections.shuffle()

如果不用上面的提示用其它的方法也行
...全文
333 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyuelin311 2007-07-22
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;

public class Ruader {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String sin = in.nextLine().replaceAll("[^0-9]", "");
while (sin.equals(""))
sin = in.nextLine().replaceAll("[^0-9]", "");
ArrayList<Character> ch = new ArrayList<Character>();
int setSize = 1;
for (int i = 0; i < sin.length(); i++) {
ch.add(sin.charAt(i));
setSize *= i + 1;
}
HashSet<String> set = new HashSet<String>();
while (set.size() < setSize) {
StringBuilder sb = new StringBuilder();
for (Character t : ch)
sb.append(t);
set.add(sb.toString());
Collections.shuffle(ch);
}
for (String t : set)
System.out.println(t);
}
}
Rudeeeeeee 2007-07-21
  • 打赏
  • 举报
回复
你这个不行,只输出一个串
zapdos 2007-07-21
  • 打赏
  • 举报
回复
什么一个串?
这个是用,来分割字符串的
比如1,2,3,4,dd,ff
zapdos 2007-07-20
  • 打赏
  • 举报
回复
更正:

public class test{
String[] list;
StringBuffer sb = new StringBuffer();
int start;
test(String in){
list = in.split(",");
printList();
System.out.print(sb);
}
void replaceStr(int c1,int c2){
String temp = list[c1];
list[c1] = list[c2];
list[c2] = temp;
}
void printList(){
if(start==list.length-1)
for(int i=0;i<list.length;i++)
sb.append(list[i]+(i==list.length-1?"\n":","));
else
for(int i=start;i<list.length;i++){
replaceStr(start++,i);
printList();
replaceStr(i,--start);
}
}
public static void main(String args[]){
new test(args[0]);
}
}
zapdos 2007-07-20
  • 打赏
  • 举报
回复
是不是这个?

public class test{
String[] list;
StringBuffer sb = new StringBuffer();
int len,start,x;
test(String in){
len = Integer.parseInt(in);
list = new String[len];
for(int i=0;i<len;i++)
list[i] = String.valueOf(i+1);
printList();
System.out.print(sb);
}
void replaceStr(int c1,int c2){
String temp = list[c1];
list[c1] = list[c2];
list[c2] = temp;
}
void printList(){
if(start==len-1){
if(x++>10000000){
x=0;
System.out.print(sb);
sb = new StringBuffer();
}
for(int i=0;i<len;i++,x++)
sb.append(list[i]);
sb.append(" ");
}else{
for(int i=start;i<len;i++){
replaceStr(start++,i);
printList();
replaceStr(i,--start);
}
}
}
public static void main(String args[]){
new test(args[0]);
}
}
Rudeeeeeee 2007-07-20
  • 打赏
  • 举报
回复
给答案
nattystyle 2007-07-20
  • 打赏
  • 举报
回复
估计楼主是搞错了,123确实只有6个

LZ小学没学好吧,6和9搞混了:)
orangemike 2007-07-20
  • 打赏
  • 举报
回复
123 有几个组合???
123,132,213,231,312,321 请问还有什么可能?

先算出这个字符串中不重复的字符共i个。结果等于i!排列组合吧?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧