社区
C++ 语言
帖子详情
微软经典面试题
bastenf
2006-09-04 09:55:36
题目:给出一个函数来输出一个字符串的所有排列
想问 除了嵌套N循环的做法外,有没有其他好的办法?
...全文
4049
33
打赏
收藏
微软经典面试题
题目:给出一个函数来输出一个字符串的所有排列 想问 除了嵌套N循环的做法外,有没有其他好的办法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tame1983
2006-09-22
打赏
举报
回复
用递归方法写了一个小函数,好像还成
//用递归方法给出一个整数数组的所有排列。
void Permutation(int intLength,int intArray[],int intResult[][5])
{
//首先定义递规的出口,就是长度为2的时候,是递规的出口。
if (intLength == 2)
{
//到了最后两个数据的排列了。
intResult[0][0] = intArray[0];
intResult[0][1] = intArray[1];
intResult[1][0] = intArray[1];
intResult[1][1] = intArray[0];
}
else
{
//构造下一次递规调用的数组。
int intArrayTmp[100];
for (int i = 0 ; i < intLength ; i++)
{
intArrayTmp[i] = intArray[i+1];
}
//先求出后N-1个元素的排列结果
Permutation(intLength-1,intArrayTmp,intResult);
//求出N-1个元素的排列结果后求N个元素的排列结果。
int intPlus = GetFactorial(intLength-1); //求出前N-1的排列个数
for (int i = 1 ; i < intLength ; i++)
{
for (int j = 0 ; j < intLength-1 ; j++)
{
for(int k = 0 ; k < intPlus ; k++)
{
intResult[i*intPlus+k][j] = intResult[0+k][j];
}
}
}
//对头号元素进行按照位置的插入工作。每intPlus行对应一个插入的位置,共对应N个位置。
for (int i = 0 ; i < intLength ; i++) //i表示要插入的位置.
{
for (int j = 0 ; j < intPlus ;j++) //i*intPlus + j 表示要操作的行
{
//首先移动数据.
for (int k = intLength-1 ; k > i ; k--) //k表示现在有多少列。
{
intResult[i*intPlus + j ][k] = intResult[i*intPlus + j ][k-1];
}
//然后插入应该插入数据
intResult[i*intPlus + j ][i] = intArray[0];
}
}
}
}
a_tongm
2006-09-05
打赏
举报
回复
王晓东的那本算法书上有这个问题的讲解和代码,看一下吧
bineon
2006-09-05
打赏
举报
回复
http://www.cs.cityu.edu.hk/~luoyan/mirror/tsinghua/combinemaths/1/1_5.htm
bistar
2006-09-05
打赏
举报
回复
学习学习
做鸡真好吃
2006-09-05
打赏
举报
回复
大家给个算法名,让俺也能研究以下啊~
kangjian1
2006-09-05
打赏
举报
回复
Sorry. my wrong!
TMD can't input chinese!!
kangjian1
2006-09-05
打赏
举报
回复
I don't think it is so complex as you said!!
I think 20 lines is enough, like this:
#include <stdio.h>
#include <string.h>
#define swap(a,b){ char temp=a; a=b; b=temp; }
int main()
{
char str[]="12345";
int len = strlen(str);
int i,j;
for(j=0;j<len;j++)
for(i=0;i<len-1;i++)
{
swap(str[i],str[i+1]);
printf("%s\n",str);
}
return 0;
}
__________________
2006-09-05
打赏
举报
回复
我当时写个字典生成器玩玩。用的是递归。
picklock
2006-09-05
打赏
举报
回复
关注
liglow
2006-09-05
打赏
举报
回复
可能是我误解了题目,可是我感觉是二重循环啊,有什么难的吗?
winbondowen
2006-09-04
打赏
举报
回复
曾经在C++算法上看到过
不过现在忘记了
是用递归做的
10行代码以内吧
herman~~
2006-09-04
打赏
举报
回复
关注
qdhuxp
2006-09-04
打赏
举报
回复
gz
Bennyatt
2006-09-04
打赏
举报
回复
似乎只有穷举法
穷举还得做的有水准要能处理未知长度种类的串....
有空的话咱们大家都写几个切磋一下
bastenf
2006-09-04
打赏
举报
回复
能不能给个具体点的说明啊!!!这样太笼统了啊!!
IT有个圈儿
2006-09-04
打赏
举报
回复
关注!
AdenPlus
2006-09-04
打赏
举报
回复
递归和回溯应该都可以啊!
格兰特杨
2006-09-04
打赏
举报
回复
关注
healer_kx
2006-09-04
打赏
举报
回复
搜索回溯(我不太会)
xiaosong8584
2006-09-04
打赏
举报
回复
用 求九宫的递归算法 ,
可以实现按照字符串长度的全排列,
时间复杂度是n!
加载更多回复(13)
微软
经典
面试题
(源文件)
12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?
微软
经典
面试题
(可执行文件)
12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?
C语言入门到高阶--
面试题
讲解
尹成老师带你步入 C 语言的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以 C 语言为核心,完整精彩的演练了数据结构、算法、设计模式、数据库、大数据高并发检索、文件重定向、多线程同步、进程通讯、...
微软
面试题
超牛超变态的
微软
面试题
面试题
经典
面试题
微软
面试题
C#面试
面试题
经典
面试题
微软
面试题
C#面试
微软
面试题
(很动脑哦!附答案、解析及英文原版)
微软
的
面试题
-超变态但是很
经典
(附答案、解析及英文原版)
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章