用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列。设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次。例

booming 2003-08-31 01:59:18
用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列。设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次。例如:对于
s[]="abc",n=2
则所有的字符排列:
ab,ba,ca,ac,bc,cb
请问,能否用非递归,且不要数组,栈等做出?
请讲出思想先。谢谢!
...全文
177 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
booming 2003-09-01
  • 打赏
  • 举报
回复
faint:(
WYlslrt 2003-09-01
  • 打赏
  • 举报
回复
可以用baisc,这个语言支持,变量为字符型,可以运算。
例如
dim a,b as string
a="hello"
b=" WY"
a=a+b
所以
a="hello WY"
booming 2003-09-01
  • 打赏
  • 举报
回复
up
booming 2003-08-31
  • 打赏
  • 举报
回复

是啊,如果能用数组,试探法就可以做了。
但,不知能否不要数组,有啥法子。
当然,更不要用啥栈等。
lyblangzi 2003-08-31
  • 打赏
  • 举报
回复
先用字典排序生成N个字符的组合
然后对每一个组合生成它的排序
在《组合数学》(国外经典教材系列)中有它的算法
WYlslrt 2003-08-31
  • 打赏
  • 举报
回复
可以这样遍历:
s=1234567
n=3
123 124 125 126 127
134 135 136 137
145 146 147
156 157
167
234 235 236 237........
没时间,只好写出相似的。
slen为s的长度
int i,temp,t[n]; char str[n];
temp = 0;
for(i=0;i<n;++i){
if(str[i] != s[slen-1]){ //组合元素
str[i]=s[temp];
t[i]=temp;
if(i=n-1){
i--;
}
temp++;
if(temp=7) temp=0;
}
else{
i=i-2;
temp=(t[i]+1)%7;
}
if(str[0]=str[slen-1]) break;
}

因写的匆忙,如有错误请高手指出,谢谢

WYlslrt 2003-08-31
  • 打赏
  • 举报
回复
用循环吧,把每一个都遍历一遍,


WYlslrt 2003-08-31
  • 打赏
  • 举报
回复
不用数祖?
booming 2003-08-31
  • 打赏
  • 举报
回复


能否不要额外工作数组。
寻开心 2003-08-31
  • 打赏
  • 举报
回复
先要统计字符串当中有无重复的字母
然后再用排列组合的办法,search老帖子吧
ZhangYv 2003-08-31
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=2987

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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