我们先来看一个剑指offer中的编程练习题吧:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
这个编程练习并不难,有两个关键点:
①在于int和string之间的转换方便排序;
②在排序时要完成两个记录的全排列再比较。
看到在排序时需要特殊操作,我们完全可以借助STL提供的sort函数完成我们需要的操作
具体代码如下:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(string st1, string st2)
{
string s1 = st1 + st2;
string s2 = st2 + st1;
return s1 < s2;
}
string PrintMinNumber(vector<int> numbers) {
string result;
if (numbers.size() == 0)
return result;
vector<string> strNum;
for (int i = 0; i<numbers.size(); i++) //完成转换
{
strNum.push_back(to_string(numbers[i]));
}
sort(strNum.begin(), strNum.end(),cmp );