题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:返回值已经给与提示 ,为防止数溢出,将数组转出 字符串,比较字符串的大小,然后 做排列组合。
我的chen()思路 是类似于冒泡的思想,将字符串按照从小到大 排列,那么此时按顺序拼接出的字符串就是 最小的数字。
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
int len = numbers.size();
if(len == 0) return "";
sort(numbers.begin(), numbers.end(), cmp);
string res;
for(int i = 0; i < len; i++){
res += to_string(numbers[i]);
}
return res;
}
static bool cmp(int a, int b){
string A = to_string(a) + to_string(b);
string B = to_strin g(b) + to_string(a);
return A < B;
}
};
#include <sstream>
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
len = numbers.size();
for (int i = 0; i<len; ++i)
{
string res;
stringstream ss;
ss << numbers[i];
ss >> res;
num_str.push_back(res);
}
//pai(0);
chen();
return min;
}
void chen()
{
for (int i = 0; i < len; ++i)
{
int min = i;
for (int j = i + 1; j < len; ++j)
{
if (num_str[j].compare(num_str[min]) == -1)
{
min = j;
}
}
if (min != i)
{
string temp = num_str[min];
num_str[min] = num_str[i];
num_str[i] = temp;
}
}
string temp = "";
for (int i = 0; i < num_str.size(); ++i)
{
temp += num_str[i];
}
min=temp;
}
/*
void pai(int index)
{
if (index == len-1)
{
string temp = "";
for (int i = 0; i<len; ++i)
{
temp += num_str[i];
}
if (min == "")
{
min = temp;
}
else if (min.compare(temp) == 1)
{
min = temp;
}
return;
}
for (int i = index; i<len; ++i)
{
if (num_str[i].compare(num_str[index]) == 1)
continue;
string temp = num_str[index];
num_str[index] = num_str[i];
num_str[i] = temp;
pai(index+1);
num_str[i] = num_str[index];
num_str[index] = temp;
}
}
*/
vector<string> num_str;
int len;
string min;
};