您的位置:首页 > Web前端

剑指Offer(33)求数组排列出来的最小数

2015-08-01 17:06 423 查看
求数组排列的最小数,一来可以通过求出各种排列组合,然后进行比较,得出结果,但这样会带来很多问题,一是计算量很大,时间复杂度高;二是排列出来的数可能是大数,不在int的比较范围之内。

还有一种方法,也是借鉴网上的方法,就是将排列好的大数转换成string类型,然后用泛型函数里的sort进行比较排序。这样就得出想要的答案了。当然首先要将int型的各个数组转换成string类型,这里借助了sstream(详情请查看这篇文章:http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/)。

下面直接贴出代码:

#include "stdafx.h"
#include <iostream>
#include <stdio h="">
#include <string>
#include <sstream>
#include <algorithm>

using namespace std;

bool compare(string& str1, string& str2 )
{
string s1 = str1;
string s2 = str2;

s1.append(str2);
s2.append(s1);

return s1 < s2;

}

void ComArrayMin(int* pArray, int num)
{
//int i;
string* pStrArray = new string[num];

for(int i = 0; i < num; ++i)
{
stringstream stream;
stream<<parray i="" stream="">>pStrArray[i];
}

sort(pStrArray,pStrArray + num,compare);

for(int i =0; i < num; ++i)
{
cout<<pStrArray[i];
}

cout<<endl;

delete[] pStrArray;
}

int _tmain(int argc, _TCHAR* argv[])
{
int Array[] = {3,32,321};
int len = sizeof(Array)/sizeof(int);
ComArrayMin(Array, len);

getchar();
return 0;
}
</parray></algorithm></sstream></string></stdio></iostream>


文章参考:http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/
http://blog.csdn.net/cxllyg/article/details/7659525 http://www.cnblogs.com/xinsheng/p/3585331.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息