题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。
在这里不仅需要得到这个数组里面所有的组合,而且要找到最小的那一个,并且还有一个问题,就是数组中排好的数可能溢出,所以就干脆把他们都转成字符串,这样比较字符串同样可以找到最小的那一个。所以最后的解决方法是,找到所有的排列方式,以字符串的形式存储,然后再找到最小的一个,这时我想到用map的key保存每种排列方式的字符串,这样,当我将所有的排列方式都保存完的时候,他们在map中已经是有序的,并且,map中第一个元素的key值就是我要找的最小的排列方式。
下面是实现代码:
#include <iostream>
#include <map>
#include <stdio.h>
#include <string>
using namespace std;
void swap(int* num1, int* num2)
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
void permute(int* inter, int k, int len,map<string,int>* nMap) //采用递归的方法找到每一种排列方式并以字符串的形式