C/C++实现多个数的拼接(组合)成最大数字

欢迎转载,转载请注明出处,谢谢!

 面试的时候经常有一道题就是给你多个数,让你拼接或者组合成一个最大的数字,如687682399689,拼接后最大的数字应该为968968768239,题目一看很容易使人想到用贪心算法,对齐后每次选取当前最大数,但考虑到数字位数不一,需要加很复杂的控制,导致代码根本写不出,其实只要跳出这个局限算法就很容易实现了

 让我们看一个最简单的例子,数组a存有1234拼接成最大的数是4321,算法实现思路如下:

 for i=0 to 3

 for j=i+1 to 3

 dif="a[i]拼接a[j]" - "a[j]拼接a[i]"   //第一次拼接后是12-21

 if(dif<0)

 then

 swap (a[i]a[j]) //第一次12-21<0所以交换他们,数组a变为 2134

//后面就是重复比较直至最后4排到了最前面,一轮结束后就为4123,然后从i=2

 //开始又重新一轮,直至最后4321,即为所求

#include 
#include 
#include 
using namespace std;
//int 转string
string intToString(int num) {
	char p[255];
	sprintf(p, "%d", num);
	string s(p);
	return s;
}
//string转int
int stringToint(const string&s) {
	return atoi(s.c_str());
}
//多个数组合合并为最大数,注意要将数组长度传入,在函数内部数组参数会转为指针,从而求不出长度
void composeBiggest(int num[], int len) {
	int tempNum;
	string temp1, temp2;
	for (int i = 0; i



 最后可以得到正确结果,其实很多公司的相当大一部分编程算法题主要是技巧,不要想的太复杂了 






你可能感兴趣的:(面试编程)