【发布时间】:2012-05-25 20:21:51
【问题描述】:
我想就效率问我所有的程序员同事。我目前正在解决工作面试中可能会问到的问题,并且遇到了著名的 string 排列。我在下面写的代码可能是编程历史上最常见的东西,但是我不知道它的状态,因为我没有检查任何解决方案。
长话短说我在下面编写的程序是否是一个合适的解决方案?或者它可以变得更有效率。问是因为如果有一天我遇到了,我想确定我已经实施了解决这个问题的最佳方法之一。
#include <iostream>
using namespace std;
int fac(int num)
{
int result=1;
for(int i=1;i<=num;i++)
result*=i;
return result;
}
int main(int argc, const char * argv[])
{
string str="abcd";
int limit=fac(str.size());
int mod=str.size();
for(int i=0;i<limit;i++){
swap(str[i%mod],str[(i+1)%mod]);
cout<<str<<endl;
}
return 0;
}
【问题讨论】:
-
你知道
std::next_permutation,对吧? -
是的,我愿意。但没有提到它,因为它是一个标准库,而不是我想出的解决方案
-
如果你对人们正确地告诉你不要重新发明轮子不感兴趣,那么这属于CodeReview.SE 而不是 SO。
-
我非常感谢我从来没有经历过这些采访,以及他们可能会问的疯狂问题。这是咨询和/或教学历史的优势。你的名声在你之前。
标签: c++ performance algorithm permutation