题目描述(选自剑指之把数组排成最小的数)
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
}
};
思路:
1.观察返回值是string类型,可知算法处理用到string
2.由题拼接,想到string函数的to_string()函数
3.所以我们可以用vector函数中的sort函数,降序拼接得到想要结果,怎么知道怎么降序?
* 排序规则如下:
* 若ab > ba 则 a > b,
* 若ab < ba 则 a < b,
* 若ab = ba 则 a = b;
* 解释说明:
* 比如
"3"
<
"31"
但是
"331"
>
"313"
,所以要将二者拼接起来进行比较
代码如下:
头文件:
#include<iostream>
using namespace std;
#include <vector>
#include<string.h>
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
int num=numbers.size();
string str;
sort(numbers.begin(),numbers.end(),cmp);
for(int i=0;i<num;i++)
{
str+=to_string(numbers[i]);
}
return str;
}
static bool cmp(int a,int b)
{
string A=to_string(a)+to_string(b);
string B=to_string(b)+to_string(a);
return A<B;
}
};
收获知识点:
以前最熟悉的就是vec.size(),vec.push_back()。sort函数说实话很少用。现在结合string的to_string()函数函数,才知道这么强大快捷。
有关于vector,具体看我的博客https://mp.csdn.net/postedit/89446250
18 .vector中元素的排序:
#include <algorithm>
bool cmp(int a,int b){
return a>b;
}
sort(vec.begin(),vec.end(),cmp); // 按升序排序
bool cmp(int a,int b){
return a<b;
}
sort(vec.begin(),vec.end(),cmp); // 按降序排序
to_string()函数:将数值转为字符串
函数原型:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
循环拼接:
for(int i=0;i<num;i++)
{
str+=to_string(numbers[i]);
}