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

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

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

如果不用上面的提示用其它的方法也行
...全文
335 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
infon 2007-08-03
  • 打赏
  • 举报
回复
public class PaiLie {
public static void main(String[] args) {
int []a= new int[]{1,2,3,4,5};
Perm(a,0,4);
}
public static void Perm(int list[],int k,int m){
if(k==m){
for(int i=0;i<=m;i++)
System.out.print(list[i]);
System.out.println();
}
else
for(int i=k;i<=m;i++){
int tmp=list[i];
list[i]=list[k];
list[k]=tmp;
Perm(list,k+1,m);
tmp=list[i];
list[i]=list[k];
list[k]=tmp;
}
}
}
lmning 2007-08-03
  • 打赏
  • 举报
回复
123不重复还能搞出9个来?
damagegod 2007-08-03
  • 打赏
  • 举报
回复
非递归版本: 自己改成java的吧。
#include <stdio.h>
int pl(int n)
{ int a[100];
int flag=1;
FILE *rf ;
int i,j,k,x,count=0;
rf = fopen("pl.txt", "w") ;
for (i=1;i<=n;i++)
a[i]=i;
while (flag) /* 还剩余未输出的排列*/
{ for (i=1;i<=n;i++) /* 输出当前排列 */
{ printf("%4d",a[i]); fprintf(rf,"%4d",a[i]);}
printf("\n"); fprintf(rf,"\n");
count++; /*计数器加1*/
i=n; /*从后向前找相邻位置后大前小的元素值*/
while (i>1 && a[i]<a[i-1]) i--;
if (i==1) flag=0; /*未找到则结束*/
else {j=i-1;i=n; /* 若找到,则在该位置的后面从右向左找第一个比该元素大的值*/
while (i>j && a[i]<a[j]) i--;
k=a[j]; /*交换两元素的值*/
a[j]=a[i];
a[i]=k;
k=j+1; /*对交换后后面的数据由小到大排序*/
for ( i=k+1;i<=n;i++) /*插入排序*/
{ j=i-1;
x=a[i];
while (j>=k && x<a[j]) { a[j+1]=a[j]; j--;}
a[j+1]=x;
}
}
}
fclose(rf);
return count; /*返回排列总个数*/
}
int main()
{int n,m=0;
printf("please input n:");
scanf("%d",&n);
m=pl(n);
printf("\nm=%d",m);
getch();
}
damagegod 2007-08-03
  • 打赏
  • 举报
回复
会c的,java的没写过,凑合着看吧
递归版本
#include"stdio.h"

void Swap(int &a,int &b)
{
int temp=a;a=b;b=temp;
}
void Perm(int list[],int k,int m)
{
if(k==m)
{
for(int i=0;i<=m;i++)
printf("%d",list[i]);
printf("\n");
}
else
for(int i=k;i<=m;i++)
{
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}

main()
{
int a[10]={1,2,3,4,5};
Perm(a,0,4);
while(true);
}
zhanggang_wq 2007-08-02
  • 打赏
  • 举报
回复
要是你做得出我给你200分 你还真是个...!
sisihj 2007-07-31
  • 打赏
  • 举报
回复
无语。。。
Rudeeeeeee 2007-07-20
  • 打赏
  • 举报
回复
.

23,407

社区成员

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

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