剑指offer32:把数组排成最小的数
题目描述
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,
打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},
则打印出这三个数字能排成的最小数字为321323。
解法一:基于sort排序成最小字符串再拼接
class Solution {
public:
static bool Compare(string num1, string num2)
{
string strNum1 = num1;
strNum1.append(num2);
string strNum2 = num2;
strNum2.append(num1);
return strNum1<strNum2;
}
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(), Compare);
for (int i = 0; i<strNum.size(); i++)
result.append(strNum[i]);
return result;
}
};
main函数
#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int> numbers = { 3,32,321 };
Solution a;
cout<<"最小的组合数字为: "<< a.PrintMinNumber(numbers)<<endl;
system("pause");
return 0;
}