社区
非技术区
帖子详情
算法题: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
打赏
收藏
算法题:100分,给出任意长度数字字符串,求所有不重复的组合
比如输入字符串"1234", 输出所有的不重复的24个组合:1234,1243,1324,1342。。。。。。, 输入字符串"123", 输出所有的不重复的9个组合:123,132,213,。。。。。。 提示: 第一步:求出给定字符串的所有不重复组合数,比如"1234"的组合是24个,"123"是9个,"1233"是9个, 第二步:用到Hashtable和collections.shuffle() 如果不用上面的提示用其它的方法也行
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
.
找出最大
长度
重复
字符串
闲话不多说了,写了一个简单的查找
算法
,就是找出最大
长度
重复
字符串
,或者说找出规律
字符串
等待之类的,都是这个意思。
题
目如下: 问
题
比较easy,就不多啰嗦,说下思路,直接上代码! 思路:
重复
次数肯定和
长度
相关的,比如
长度
为14 ,那么
重复
的只能是1,2,7,14个字符
长度
的
字符串
,对比其他的并没有意义 方法:
字符串
长度
求
余,
字符串
分
割对比,递归循环,直到找到最长的
字符串
代码如下,几乎每行都注释了,老铁们应该看得懂,感觉还行的话,关注下撒!点个赞也可以的哟~ import org...
算法
设计:如何将
字符串
编码为
数字
字符串
遍历
字符串
:逐个字符遍历整个
字符串
。获取ASCII值:将每个字符转换为其对应的ASCII值。拼接
数字
:将这些ASCII值拼接成一个长
数字
字符串
。
字符串
的全排列和
组合
算法
(扩展:八皇后问
题
)
一、
字符串
的全排列
题
目:输入一个
字符串
,打印出该
字符串
中字符的所有排列。例如输入
字符串
abc,则打印出由字符a,b,c所能排列出来的所有
字符串
abc,acb,bac,bca,cab,cba。
算法
思想: 我们现在来看这个例子,
分
为如下三组:a b c——a c bb a c——b c ac b a——c a b我们
求
整个
字符串
的排列,可以看成两步:首先
求
所有可能出现在第一个位置的字符,即把第一个字符
Algorithm:【
算法
进阶之路】之
算法
面试刷
题
集合—
字符串
相关
算法
的简介、习
题
集合(
字符串
的排列/无
重复
字符的最长子串/最长公共前缀/最长回文子串/
字符串
相乘/反转
字符串
中的单词/单词拆
分
/
字符串
Algorithm:【
算法
进阶之路】之
算法
面试刷
题
集合—
字符串
相关
算法
的简介、习
题
集合(
字符串
的排列/无
重复
字符的最长子串/最长公共前缀/最长回文子串/
字符串
相乘/反转
字符串
中的单词/单词拆
分
/
字符串
解码/简化路径/复原IP地址,
字符串
的循环左移/
字符串
的全排列/带有同个字符的全排列/串匹配问
题
的BF
算法
和KMP
算法
) 目录 一、
字符串
相关的
算法
题
早期—
字符串
相关的
算法
习
题
:C++语言 二、BF
算法
和KMP
算法
一、
字符串
相关的
算法
题
企
给定一个
字符串
,请你找出其中不含有
重复
字符的最长子串的
长度
给定一个
字符串
,请你找出其中不含有
重复
字符的 最长子串 的
长度
。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无
重复
字符的最长子串是 “abc”,所以其
长度
为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无
重复
字符的最长子串是 “b”,所以其
长度
为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无
重复
字符的最长子串是 “wke”,所...
非技术区
23,407
社区成员
70,513
社区内容
发帖
与我相关
我的任务
非技术区
Java 非技术区
复制链接
扫一扫
分享
社区描述
Java 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章